2010-04-29 6 views
28

je stocke les dates dans une base de données SQLite dans ce format:Chaîne à java.util.Date

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

Lorsque je récupère la date avec ce format que je suis obtenir tout bien sauf l'heure. L'heure est toujours 00. Voici ma sortie:

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

Voici le code:

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'est-ce que je fais mal?

+0

s'il vous plaît ajouter le code que vous utilisez pour analyser la date –

+0

J'ai spécifié le code –

+3

Okay buddies Problème résolu, problème avec le AM ​​/ PM "lettre aaa" au format, comme j'utilise 'HH', 'aaa' devrait ne pas être utilisé, si vous utilisez 'aaa' alors indiquez 'hh' –

Répondre

50

Je pense que votre format de date n'a pas de sens. Il n'y a pas 13h00. Supprimez le "aaa" à la fin de votre format ou tournez le HH en hh.

Néanmoins, cela fonctionne bien pour moi:

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

Il imprime "29 avril 13:00:14 CEST Jeu 2010". Qu'est-ce que le code ci-dessus imprime sur votre système? Si cela fonctionne, pouvez-vous réduire votre exemple à un exemple qui montre le problème?

2

Vous devez définir un fuseau horaire dans votre format DateFormat, sinon il utilisera celui par défaut (en fonction des paramètres de l'ordinateur).

+0

J'ai spécifié le fuseau horaire dans le format comme lettre z, le problème persiste toujours –

+0

Votre chaîne de date n'a pas d'informations de fuseau horaire donc la lettre z ne va pas aider, utilisez setTimeZone (...) sur l'objet SimpleDateFormat à la place – Guillaume

4

Il semble que vous souhaitiez utiliser quelque chose comme SimpleDateFormat. http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html

Vous déclarez votre format de date, puis appelez la méthode parse avec votre chaîne.

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

Et comme le dit Guillaume, définissez le fuseau horaire!

+0

mais les objets DateFormat ne sont pas thread-safe, ils ne doivent pas être déclarés statiques, car il est plus probable qu'ils seront accessibles à partir de différents threads à un moment donné. – Guillaume

Questions connexes