2010-04-29 2 views
28

sto Memorizzazione le date in un database SQLite in questo formato:Conversione di stringhe in java.util.Date

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

Quando ho recuperare la data con questo formato sono ottenere ogni bella cosa tranne l'ora. L'ora è sempre 00. Qui è la mia uscita:

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

Ecco il codice:

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); 

Che cosa sto facendo di sbagliato?

+0

per favore aggiungi il codice che usi per analizzare la data –

+0

Ho specificato il codice –

+3

Compagni OK Problema risolto, problema con AM/PM "lettera aaa" nel formato, dato che sto usando 'HH', 'aaa' dovrebbe non utilizzare, se si utilizza 'aaa', quindi specificare 'hh' –

risposta

50

Penso che il formato della data non abbia senso. Non ci sono le 13:00. Rimuovi "aaa" alla fine del tuo formato o trasforma l'HH in hh.

Tuttavia, questo funziona bene per me:

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); 

Esso stampa "Gio 29 Apr 13:00:14 CEST 2010". Cosa stampa il codice sopra nel tuo sistema? Se funziona, puoi ridurre il tuo esempio a quello funzionante che mostra il problema?

2

È necessario impostare un fuso orario nel DateFormat, altrimenti verrà utilizzato quello predefinito (in base alle impostazioni del computer).

+0

Ho specificato il fuso orario nel formato come lettera z, il problema persiste ancora –

+0

La stringa della data non ha informazioni sul fuso orario in modo che la lettera z non serva, utilizzare setTimeZone (...) sull'oggetto SimpleDateFormat invece – Guillaume

4

Sembra che si desideri utilizzare qualcosa come SimpleDateFormat. http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

Si dichiara il formato della data e quindi si chiama il metodo di analisi con la stringa.

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

E come dice Guillaume, imposta il fuso orario!

+0

Non correlato ma gli oggetti DateFormat non sono thread-safe, non dovrebbero essere dichiarati statici perché rendono più probabile che a un certo punto accedano da thread diversi. – Guillaume