2016-04-24 13 views
1

ich mit folgenden URL meines rest api nenne localhost:8080/api/2016-05-30T10:30:00-05:00/3Datetime-Konvertierung in java.sql.Timestamp ist das Hinzufügen von 1 Stunde

Die api date als String empfängt und mich dann wie dateTime = DateTime.parse(date); in jodatime Datetime-Objekt konvertieren ... Debuggen Dieser Code zeigt, dass sich der erwartete Wert ergibt.

Allerdings, wenn ich dieses Datum java.sql.timestamp wie Timestamp ts = new Timestamp(dateTime.getMillis()); bin Umwandlung ... die resultierende Zeit ist 2016-05-30 11:30:00.0 ... warum es ist das Hinzufügen +1 hour der Zeit und was ist der richtige Weg zu konvertieren?

SOME HINTERGRUND

Ich habe die Zeit als Zeitstempel in SQL-Tabelle gespeichert. mit Zeitzone (zum Beispiel als String +4: 00 oder -5: 00) in einer separaten Spalte.

Ich würde eine ISO8601 Zeit in meinem URL-Pfadparameter erhalten und basierend darauf muss ich den Datensatz von db abrufen. Dafür werde ich zwei Vergleiche verwenden. 1 entspricht der Uhrzeit und 2 entspricht der Zeitzone.

+1

Sie können Informationen zur Zeitzone hinzufügen. Es kann oft ... interessante Nebenwirkungen haben. – Matthieu

+0

Welche Informationen soll ich hinzufügen? Ich mache keine explizite pro sagen ... mein System ist auf EDT Time Zone obwohl –

+0

Ich bin nicht vertraut mit jodatime aber 'java.sql.Timestamp (lang)' erwartet das Argument in GMT Zeitzone und ich don Es wird keine Zeitzone angezeigt, die im ['BaseDateTime.getMillis()' javadoc] angegeben ist (http://joda-time.sourceforge.net/apidocs/org/joda/time/base/BaseDateTime.html#getMillis%28%29), obwohl es scheint, ISO8601 zu verwenden, welches Z UTC bedeutet, das Äquivalent zu GMT ist ... – Matthieu

Antwort

1

Die ISO 8601 besagt, dass

... die Zeit in New York in Winter ist UTC-05: 00

So scheint es daylight saving timeist nicht in dem Zeitpunkt, string, was bedeutet, dass Sie die korrekte Zeit gemäß der definierten Zeitzone erhalten (-05:00). New York Sommer Zeit -04:00 sein sollte, da DST nicht Teil von ISO ist 8601.

Sie könnten eine zusätzliche DST Spalte in Ihrer Datenbank hinzuzufügen, oder es als Parameter hinzuzufügen, oder den Prozess durchlaufen zu überprüfen, ob Sie in DST, die von Land zu Land variiert (zB Katar verwendet es nicht) und Jahr für Jahr (zB Russland hat DST vor ein paar Jahren verlassen), so ist es keine praktikable Option ...

EDIT: Eine andere Option wäre es für Sie zu testen, ob die Zeitzone derzeit in DST ist, wie in another answer angezeigt. Sie könnten dann den -1h Offset anwenden.

Beachten Sie, dass Joda über eine minusHours() Methode verfügt, die Sie verwenden können, wenn inDaylightTime()true zurückgibt.

Verwandte Themen