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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top