2010-04-29 21 views
28

estoy almacenando las fechas en una base de datos SQLite en este formato:Convierte la cadena a java.util.Date

d-MMM-yyyy,HH:mm:ss aaa 

Cuando recupero la fecha con ese formato Soy conseguir cada cosa fina a excepción de la hora. La hora siempre es 00. Aquí está mi salida:

String date--->29-Apr-2010,13:00:14 PM 
After convrting Date--->1272479414000--Thu Apr 29 00:00:14 GMT+05:30 2010 

Aquí está el código:

Date lScheduledDate = CalendarObj.getTime(); 
    DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa"); 
    SomeClassObj.setTime(formatter.format(lScheduledDate)); 

    String lNextDate = SomeClassObj.getTime(); 
    DateFormat lFormatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa"); 
    Date lNextDate = (Date)lFormatter.parse(lNextDate); 
    System.out.println("output here"+lNextDate); 

¿Qué estoy haciendo mal?

+0

por favor agregue el código que usa para analizar la fecha –

+0

He especificado el código –

+3

Compinches bien Problema resuelto, problema con la "letra aaa" de AM/PM en formato, ya que estoy usando 'HH', 'aaa' debería no ser usado, si usa 'aaa' entonces especifique 'hh' –

Respuesta

50

Creo que el formato de fecha no tiene sentido. No hay 13:00 PM. Elimine el "aaa" al final de su formato o gire el HH a hh.

Sin embargo, esto funciona muy bien para mí:

String testDate = "29-Apr-2010,13:00:14 PM"; 
DateFormat formatter = new SimpleDateFormat("d-MMM-yyyy,HH:mm:ss aaa"); 
Date date = formatter.parse(testDate); 
System.out.println(date); 

Imprime "Jue Abr 29 de 2010 13:00:14 CEST". ¿Qué imprime el código anterior en su sistema? Si funciona, ¿puedes reducir tu ejemplo a uno funcional que muestre el problema?

2

Debe establecer un TimeZone en su DateFormat, de lo contrario utilizará el predeterminado (dependiendo de la configuración de la computadora).

+0

Especifiqué la zona horaria en el formato de letra z, el problema aún persiste –

+0

Su cadena de fecha no tiene información de zona horaria, por lo que la letra z no ayudará, use setTimeZone (...) en el objeto SimpleDateFormat en su lugar – Guillaume

4

Parece que es posible que desee utilizar algo como SimpleDateFormat. http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

Declara el formato de fecha y luego llama al método de análisis con la cadena.

private static final DateFormat DF = new SimpleDateFormat(...); 
Date myDate = DF.parse("1234"); 

Y como dice Guillaume, configure la zona horaria.

+0

No relacionado pero los objetos DateFormat no son seguros para subprocesos, no deben declararse estáticos porque aumenta la probabilidad de que se acceda a ellos desde diferentes subprocesos en algún momento. – Guillaume

Cuestiones relacionadas