2011-05-31 16 views
138

por lo que obtener un atributo de fecha de un objeto entrante en la forma:Conversión de un objeto Date a un objeto de calendario

Tue May 24 05:05:16 EDT 2011 

Estoy escribiendo un método de ayuda sencilla para convertirlo en un método de calendario, que estaba usando el siguiente código:

public static Calendar DateToCalendar(Date date) 
{ 
Calendar cal = null; 
try { 
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
    date = (Date)formatter.parse(date.toString()); 
    cal=Calendar.getInstance(); 
    cal.setTime(date); 
    } 
    catch (ParseException e) 
    { 
     System.out.println("Exception :"+e); 
    } 
    return cal; 
} 

Para simular el objeto entrante sólo estoy asignando los valores dentro del código usando actualmente:

private Date m_lastActivityDate = new Date(); 

Sin embargo, esto me está Givin un puntero nulo una vez que alcanza el método:

date = (Date)formatter.parse(date.toString()); 
+1

Dup de http://stackoverflow.com/questions/2727698/date-object-to-calendar-java – Vadzim

Respuesta

342

Aquí es su método:

public static Calendar toCalendar(Date date){ 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    return cal; 
} 

Todo lo demás que está haciendo es a la vez malo e innecesario.

BTW, las convenciones de nomenclatura de Java sugieren que los nombres de los métodos comiencen con una letra minúscula, por lo que debe ser: dateToCalendar o toCalendar (como se muestra).


Bien, lechemos su código, ¿o sí?

DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
date = (Date)formatter.parse(date.toString()); 

DateFormat se utiliza para convertir las cadenas de fechas (parse()) o Fechas para cuerdas (format()). Lo está usando para analizar la representación de Cadena de una Fecha volver a una Fecha. Esto no puede ser correcto, ¿verdad?

+0

Muchas gracias hombre. De hecho, tengo ese código de un sitio web. Dada la limpieza del método anterior, ahora estoy empezando a sentir que mi método intToCalendar puede ser un poco inflado 'public static Calendar intToCalendar (int i) {' Calendar cal = null; try {String stringInt = String.valueOf (i); DateFormat formateador = new SimpleDateFormat ("aaaaMMdd"); Fecha de fecha = (Fecha) formatter.parse (stringInt); cal = Calendar.getInstance(); cal.setTime (fecha); } catch (ParseException e) {System.out.println ("Excepción:" + e); } return cal; } ' – Will

+1

@ Will a) no use int, use long. Las fechas tienen valores más grandes que int puede almacenar. b) use [nueva fecha (larga)] (http://download.oracle.com/javase/6/docs/api/java/util/Date.html#Date%28long%29) –

+1

Parece que el código está en la pregunta original tenía como objetivo no solo convertir 'Fecha' en' Calendario', sino también eliminar el tiempo de la fecha al mismo tiempo. Cómo hacer esto último correctamente se puede encontrar [aquí] (http://stackoverflow.com/questions/5050170/java-getting-date-without-time). En lugar de usar '(Date) formatter.parse (date.toString());', intente 'formatter.parse (formatter.formato (fecha)); ' – Chris

-5

es tan fácil ... convertir una fecha al calendario de esta manera:

Calendar cal=Calendar.getInstance(); 
DateFormat format=new SimpleDateFormat("yyyy/mm/dd"); 
format.format(date); 
cal=format.getCalendar(); 
+3

La solución aceptada desde hace dos años es una forma más limpia de hacer esto. Observe que este código tiene la suposición oculta de que el objeto de calendario asociado con 'format' contiene actualmente la fecha que acabamos de formatear, y que como efecto secundario de formatear con una fecha que no tiene horas/minutos/segundos, esa fecha interna también no tiene horas/minutos/segundos. Tal vez, pero no el comportamiento documentado. Haga lo que hace la respuesta aceptada, que dice directamente lo que estamos tratando de hacer. Si luego desea eliminar la hora/minutos/segundos, vea un comentario sobre la respuesta aceptada acerca de cómo hacer eso. – ToolmakerSteve

-8

Esta función devolverá objeto de fecha de SQL de un objeto java fecha.

public java.sql.Date convertJavaDateToSQL(Date d) 
{ 

    java.sql.Date d1= new java.sql.Date(d.getTime()); 
    return d1; 
} 
+0

La pregunta no tiene nada que ver con 'java.sql.Date'. –

Cuestiones relacionadas