2010-03-09 8 views
1

J'ai une question sur la classe SimpleDateFormat et la méthode compareTo de java.util.Date:Java SimpleDateFormat et compareTo

Je construire un objet Date, je forme, enfin je parse la chaîne formatée et comparer à la date d'origine.

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS"); 
Date originalDate = new Date(); 

String s = df.format(originalDate); 
Date parsedDate = df.parse(s); 

System.out.println("Original date: " + originalDate); 
System.out.println("Formatted date: " + s); 
System.out.println("originalDate compareTo parsedDate: " + originalDate.compareTo(parsedDate)); 

Le résultat:

Date d'origine: Lun 25 15:43:23 CET Jan 2010 Date Formaté: 2010.jan.25 03:43:23 868 originalDate compareTo parsedDate: 1

Pourquoi je reçois toujours "1"? Pourquoi la date d'origine est supérieure à la date analysée?

Répondre

4

Je pense que c'est un problème lié à 24h, date d'origine, il est 15, donc 15 heures, alors que votre parsé une est au format 12 heures, parce que vous avez utilisé spécificateur format h au lieu de H spécificateur de format. Votre heure est ensuite transformée en une mauvaise chaîne, vous perdez donc de la précision, car une fois analysée, 03 est considérée comme 3AM. Essayez avec:

DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS"); 
+0

Ou utiliser un, le spécificateur AM/PM, –

+0

Je viens d'essayer le code, cela fonctionne avec ** HH ** donc c'était le problème. Bien sûr, comme suggéré, si vous en avez besoin en format 12 heures, vous pouvez utiliser le spécificateur AM/PM au lieu de ** HH ** – Jack

+0

Oui, vous avez raison! Merci beaucoup! – Bob

1

Il fonctionne si vous ajoutez le Am/marqueur h - a

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a"); 
1

Si vous souhaitez comparer simplement les dates, peut-être à l'aide getTime() pour comparer les deux valeurs seraient une meilleure idée ...