Java SimpleDateFormat e compareTo
-
18-09-2019 - |
Domanda
Ho una domanda sulla classe SimpleDateFormat e metodo compareTo del java.util.Date:
Sto costruendo un oggetto Date, poi mi sono formato, finalmente ho analizzare la stringa formattata e confrontare con la data originale.
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));
Il risultato:
Data originale: Lun 25 Gen 15:43:23 CET 2010 Data formattato: 2010.jan.25 03:43:23 868 originalDate compareTo parsedDate: 1
Perché sto ottenendo sempre "1"? Perché la data grattugia originale rispetto alla data analizzato?
Soluzione
Credo che sia un problema relativo 24h, la data originale è 15, in modo da 15:00, mentre il vostro analizzato uno è in formato 12 ore, questo perché si utilizza h di formato invece di H di formato. È ora viene poi trasformato nella stringa sbagliato in modo da perdere precisione perché quando analizzati di nuovo 03
è considerato 03:00. Prova con:
DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
Altri suggerimenti
Funziona se si aggiunge il / pm indicatore Am - a
DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
Se si desidera confrontare solo le date, magari utilizzando getTime () per confrontare i due valori sarebbe una migliore idea ...