Zeitzonen in Java / GWT (Client-Seite)

8

[Clientseitige GWT-Klasse]

Ich habe ein Date Object ...

%Vor%

Das funktioniert gut. Aber wenn ich a:

%Vor%

Es gibt eine UNIX-Zeit Millisekunden mit einem GMT mit Sommerzeit zurück, so dass es eine UNIX-Zeit ist, die ich nicht verwenden kann. Ich brauche es in UTC. Wie mache ich das?

Momentan analysiere ich ein Datum und es gibt mir zurück:

%Vor%

Allerdings ist das Datum, an dem ich vorbeigehe, 1 Stunde kürzer als diese Zeit (7:46 und nicht 8:46!).

Wie übertrage ich die Tatsache, dass es UTC ist? Oder, wenn es UTC nicht benutzen kann (was lächerlich wäre), wie verwende ich GMT ohne die Tageslichteinsparung?

    
Federer 28.01.2010, 15:09
quelle

5 Antworten

5

Dein letzter Schnitt macht die Dinge klarer.

Im Grunde sind Sie verwirrt, und Sie bekommen bereits, was Sie wollen.

1239867980191 Millisekunden seit der Epoche übersetzt am Donnerstag, 16. April 2009, um 7: 46: 20.191 Uhr in der GMT-Zeitzone. Der gleiche Augenblick wird auf denselben Tag übertragen, aber 8: 46: 20.191 in der GMT + 01-Zeitzone. Wenn Ihre Eingabezeichenfolge "7: 46: 20.191" lautet und Sie tatsächlich 1239867980191 von Date.getTime() erhalten haben, dann hat der Parsing-Code Ihre "7: 46: 20.191" in der GMT-Zeitzone interpretiert und richtig ausgeführt .

Wenn danach beim Drucken "8:46:20" angezeigt wird, dann nur, weil Sie die Zeitzone GMT + 01 für die Anzeige dieses Augenblicks verwenden. Beachten Sie, dass die Zeichenfolge GMT+100 genau enthält, um Sie darüber zu informieren, dass sie diese Zeitzone für Anzeigezwecke verwendet. Das instant , das die Date -Instanz darstellt, ist nichtsdestoweniger genau der Moment, in dem sie enthalten soll. Denken Sie daran, dass eine Date -Instanz einen Zeitpunkt darstellt, für den keine Zeitzone gilt: Zeitzonen werden verwendet, um Zeitpunkte in Kalenderelemente (Tage, Stunden ...) und zurück zu konvertieren.

Um eine Date in eine anzeigbare Zeichenkette zu konvertieren, verwenden Sie DateTimeFormat.format(Date, TimeZone) , mit der Sie angeben können, welche Zeitzone Sie für diese Zeichenkette verwenden möchten.

    
Thomas Pornin 29.01.2010, 16:36
quelle
3

Da die Calendar -Klasse in GWT nicht unterstützt wird, wird vielleicht etwas Hackisches wie dieses funktionieren:

%Vor%

Auf diese Weise können Sie die richtigen Zeitzoneninformationen angeben - dies sollte jedoch das Standardverhalten sein.

    
Igor Klimer 28.01.2010 15:49
quelle
1

Es ist umgekehrt. Eine Date -Instanz speichert die Zeit in Millisekunden seit der Epoche unter Verwendung der UTC-Zeitskala (d. H. Schaltsekunden werden ignoriert). Dies ist, was Date.getTime() zurückgibt und das ist was du willst.

Der Täter ist hier der Parser, der das Datum interpretiert, das Sie als String in Ihrer lokalen Zeitzone angeben. Wenn DateTimeFormat die Zeichenfolge als Datum und Uhrzeit in der UTC-Zeitzone interpretieren soll, fügen Sie eine explizite Zeitzone an die analysierte Zeichenfolge an:

%Vor%

(Das obige geht davon aus, dass ich die GWT-Dokumentation richtig verstanden habe; ich habe es nicht versucht.)

Nur um in meinen Notizen klar zu sein: Es gibt keinen praktischen Unterschied zwischen "GMT" und "UTC" und es gibt keine Sommerzeit in der GMT-Zeitzone. Andere Zeitzonen werden oft als "GMT plus oder minus ein Offset" definiert und der Offset kann sich zwischen Sommer und Winter ändern. Zum Beispiel entspricht die Zeitzone in New York etwas "GMT-04" im Sommer und "GMT-05" im Winter.

    
Thomas Pornin 28.01.2010 15:55
quelle
0

Ich sehe immer Formate mit ZZZZ vorgeschlagen ... aber warum?

"JJJJ-MM-TT'T'HH: mm: ss.SSSZ" würde übereinstimmen

"2009-10-12T00: 00: 00.000-0000"

Der letzte Teil ist der Offset von UTC; Kalifornien (um die Zeit eines anderen zu verwenden) wäre -0800, -0700 im Sommer.

Als Randnotiz ist GMT auch immer -0000. Aus diesem Grund ist die britische Sommerzeit BST (British Summer Time, +0100).

    
Powerlord 28.01.2010 16:38
quelle
-2

Probieren Sie das Kalender -Objekt aus.

%Vor%

Gemäß der API gibt getTimeInMillis () "die aktuelle Zeit als UTC-Millisekunden aus der Epoche zurück."

Bearbeiten : wie _bravado erwähnt, ist der Kalender API derzeit nicht zum GWT ( Ausgabe 603 ). Während dies in einer Java-Anwendung die passende Zeit bekommen würde, wird es hier nicht funktionieren. Es gibt Informationen in der Gruppe über die Verwendung von GMT.

BEARBEITEN : Es fehlt eine schließende Klammer beim Aufruf von Calendar.getInstance ()

    
justkt 28.01.2010 15:16
quelle

Tags und Links