2017-04-25 3 views
0

Der folgende Code verhält sich nicht wie erwartet, wenn eine Daten Konvertierung in einen String, und zurück zu einem Zeitpunkt unter Java 7 hier:SimpleDateFormat nicht reversibel?

final long epochTime = 1489669024142L; 
String pattern = "ddMMMYY HH:mm"; 
final SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.ENGLISH); 
final Date inputDate = new Date(epochTime); 
final String date1 = format.format(inputDate); 
final Date date2 = format.parse(date1); 

Die Ausführung gibt mir: Klar

inputDate: Thu Mar 16 13:57:04 CET 2017 
date1: 16Mar17 13:57 
date2: Sun Jan 01 13:57:00 CET 2017 

Es gibt hier einen Unterschied von 3 Monaten, während ich einen Unterschied von 4 Sekunden erwartet habe.

Ich verwende java.util.Date, und kann JodaTime nicht verwenden.

Irgendeine Idee, wo dieser große Unterschied herkommt?

+0

Ich denke, es gibt Zeitzone Unterschied epochTime Wert und Ihre lokale. Wenn ich drucke, zeigt es an, dass die Zeit 2 Stunden länger ist als deine, weil meine Zeitzone anders ist als deine. – javasenior

+0

Ein Unterschied in der Zeitzone kann den Unterschied ausmachen, den Sie feststellen, aber ich frage nach dem Unterschied von 3 Monaten. Es gibt keine 3-Monats-Zeitzone: D – Jiehong

+0

sicher: D. Lass mich nochmal nachsehen. – javasenior

Antwort

1

Sie müssen Kleinbuchstaben y verwenden für Jahr

Weil Großbuchstaben Y Woche Jahr und Klein y Jahr. Für weitere Informationen siehe

String pattern = "ddMMMyy HH:mm"; 
+0

Das Testen bestätigt Ihre Antwort. Doch das Javadoc kann mich nicht darüber aufklären, warum eine Woche und ein Jahr mehr als 3 Wochen Unterschiede haben ... Eigentlich stört mich am meisten, dass das Parsen und Formatieren dasselbe Format verwendet, aber die Konvertierung ist weit weg. Beide sollten aus der Epoche gegeben sein! – Jiehong

Verwandte Themen