Ändern der Zeitzone ohne änderung der Zeit in Java

Ich erhalte ein datetime aus einem SOAP webservice ohne timzone Informationen. Also, die Achse deserializer übernimmt UTC. Jedoch, die datetime ist wirklich in Sydney-Zeit. Ich habe das problem gelöst, indem der Subtraktion des timezone offset:

Calendar trade_date = trade.getTradeDateTime();
TimeZone est_tz = TimeZone.getTimeZone("Australia/Sydney");
long millis = trade_date.getTimeInMillis() - est_tz.getRawOffset();
trade_date.setTimeZone( est_tz );
trade_date.setTimeInMillis( millis );

Allerdings bin ich mir nicht sicher, ob diese Lösung nimmt auch die Sommerzeit berücksichtigt. Ich denke, das sollte es, denn alle Operationen sind auf UTC-Zeit. Alle Erfahrungen, die mit der Manipulation der Zeit in Java? Bessere Ideen, wie dieses problem zu lösen?

Ich habe immer, immer, und Bearbeiten Sie nur das Datum (in jeder Sprache), mit der einzigen Einheit, die fixiert ist. Diese Einheit ist die Sekunde (oder Millisekunde). Es sind nur wenige Minuten mit 59 oder 61 Sekunden und es gibt Tage mit 23 oder 25 Stunden. Es gibt Stunden mit 60*60 +/- 1 Sekunden, etc. Alle meine Termine gespeichert werden, (milli)Sekunden seit Beginn der Epoche zurück. Das ist, wie Sie in der DB, das ist, wie Sie sortiert sind. Der einzige Zeitpunkt, zu dem ich eine timezone/yyyy-mm-dd was Bekehrung ist, wenn es sein muss, das dem Benutzer angezeigt wird (oder wenn die mit der Defekten APIs, die nicht verstehen, dass ein Datum ist expressable in Sekunden).
Das ist die fundierte Beratung, aber OP ist eindeutig gepostet, dass er erhält den Zeitstempel von einem web-Dienst ( möglicherweise 3rd-party ) und verwendet ein 3rd-party-Bibliothek, um die Anforderung zu verarbeiten. Klar gibt es einige Dinge aus seiner direkten Kontrolle, und die Umwandlung von Zeitzone zu Zeitzone ist definitiv nicht geradlinig, mit java.util.Kalender.
Vielen Dank für Ihre Kommentare. Ich bin die Generierung der Web Service stubs aus der WSDL-Datei mit Achse. Ich bin mit den generierten Klassen für die Verbindung zu einem externen web-service. Ich eigentlich, was Sie vermitteln sollten datetime-Felder entweder mit Informationen zur Zeitzone oder in UTC, was die Achse erwartet wird. Aber das ist nicht meine Wahl.

InformationsquelleAutor | 2010-05-20

Schreibe einen Kommentar