2009-03-31 6 views
4

Wenn ich ausführen:Wie (richtig) Zeitzone mit String.format% tz melden?

System.out.println("Formatter: " + String.format("%1$tH:%1$tM:%1$tS %1$tz %1$tZ", now)); 
System.out.println("SimpleDF : " + new SimpleDateFormat("HH:mm:ss Z z").format(now)); 

ich das Ergebnis erwarten, dass das gleiche sein. Wenn ich das einstellen automatisch nach Sommerzeit beginnen die Werte zu variieren:

 
without dst (as expected, gmt=9:48): 
Formatter: 10:48:16 +0100 GMT+01:00 
SimpleDF : 10:48:16 +0100 GMT+01:00 
with dst (gmt varies between formatter and sdf ???): 
Formatter: 11:47:54 +0100 CEST 
SimpleDF : 11:47:54 +0200 CEST 

Laufen auf win xp, mit gleichen Ergebnisse auf Java 1,6-10/13 und 1.5.0-14, locale de_DE. Was denkst du, ein Fehler?

Vielleicht verwandt: http://bugs.sun.com/view_bug.do?bug_id=6286592.

+0

Ich denke, es ist der Fehler, den Sie erwähnt haben. – ordnungswidrig

Antwort

1

Der korrekte Weg ist die Verwendung des Objekts SimpleDateFormat (oder besser DateFormat). String.format dient zum Formatieren von Zeichenfolgen, die als Ergebnis des Aufrufs der toString()-Methode über das übergebene Objekt zurückgegeben wurden. Die erste Zeile des Codes kann bis auf etwas gebrochen werden wie,

String temp = now.toString(); 
System.out.println("Formatter: " + String.format("%1$tH:%1$tM:%1$tS %1$tz %1$tZ", temp)); 

Das temporäre String-Objekt ist das Standardgebietsschema und Einstellungen formatiert, und daher konnte kein perfektes Ergebnis (pro meiner Erfahrung) garantieren.

SimpleDateFormat() funktioniert über das Objekt Date und greift auf Attribute zu und stellt alle DST-Patches sicher.

Verwandte Themen