Java SimpleDateFormat e compareTo
-
18-09-2019 - |
Pergunta
Eu tenho uma pergunta sobre a classe SimpleDateFormat e método compareto do java.util.Date:
Eu estou construindo um objeto Date, em seguida, formato que eu, finalmente, eu analisar a cadeia formatada e comparar com a data original.
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));
O resultado:
Data Original: Seg 25 janeiro 15:43:23 CET 2010 Data formatado: 2010.jan.25 03:43:23 868 originalDate compareTo parsedDate: 1
Por que eu estou recebendo sempre "1"? Por que o ralador data original do que a data analisada?
Solução
Eu acho que é um problema relacionado 24h, a sua data original é 15, então 03:00, enquanto seu um analisado é em 12 horas formato, isso porque você usou h especificador de formato em vez de H especificador de formato. Você hora é então transformada na seqüência errada, então você perde precisão porque quando 03
volta analisado é considerado 03:00. Tente com:
DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
Outras dicas
Ele funciona se você adicionar a am / pm marcador - a
DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
Se você quiser apenas comparar as datas, talvez usando getTime () para comparar os dois valores seria uma idéia melhor ...