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?

È stato utile?

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 ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top