2010-12-27 11 views
2

Der folgende Code:Simple Format falsche Werte

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd"); 
System.out.println(sdf.format(new Date(1293253200))); // 12/25/2010 05:00 GMT 
System.out.println(sdf.format(new Date(1293339600))); // 12/26/2010 05:00 GMT 
System.out.println(sdf.format(new Date(1293426000))); // 12/27/2010 05:00 GMT 

druckt:

01/16 
01/16 
01/16 

einen Standard DateFormat über SimpleDateFormat.getDateInstance(); Verwendung druckt diese Daten als 16-Jan-1970. Was ist los?

+0

Dummer Fehler. Danke für alle Antworten. Sie haben alle in derselben Minute geantwortet, also nicht sicher, wem Sie die richtige Antwort geben sollten. – Finbarr

Antwort

8

Sie mischen Millisekunden und Sekunden. 1293253200 ist in der Tat 16. Januar 2010. Sie haben mit 1000 multiplizieren die Daten, die Sie wollten bekommen:

Date date = new Date(1293253200L*1000L); 
Sat Dec 25 06:00:00 CET 2010 
4

Bitte überprüfen Sie die Dokumentation von Date(long) Konstruktor: Es dauert Werte in Millisekunden, nicht Sekunden.
new Date(1293253200000l) sollte gut gehen.

PS. Viele IDEs bieten Inline-Dokumentation, so dass Sie den Browser nicht einmal öffnen müssen.

2

Der Date Konstruktor erwartet seit Beginn der Epoche eine Anzahl von Millisekunden, aber die Anzahl Sie vorbei ist Sekunden seit der Epoche. Multiplizieren Sie es mit 1.000 und Sie erhalten das richtige Datum.

0

Wie von mhaller gezeigt, haben Sie in diesem Fall tatsächlich die Millisekunden und Sekunden falsch verstanden.

Der überladene Konstruktor von Date nimmt seinen Parameter als long. Das folgende Snippet von der Java-Doc-Seite.

Parameter:

Datum - Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT nicht die Millisekunden Darstellung für das Jahr zu überschreiten 8099. Eine negative Zahl gibt die Anzahl der Millisekunden vor dem 1. Januar 1970, 00:00:00 GMT.