Frage

Meine Zeitzone CET (Berlin).
Und während Joda des Datetime-Prüfung bemerkte ich einige seltsame Dinge:

new DateTime(1893, 4, 1, 0, 0, 0, 0);
=>  java.lang.IllegalArgumentException: Illegal instant due to time zone offset transition: 

new DateTime(1893, 3, 31, 0, 0, 0, 0).toDate();
=>  Fri Mar 31 00:06:32 CET 1893

6 Minuten 32 Sekunden Verschiebung in der Zeitzone in einer nicht vorhandenen Zeit resultierenden ??
Ich muss sagen, dass dies sehr unerwartet ist, da ich keine Zeitzone Informationen angegeben haben und somit nicht erwarten, in diese Art von Problem zu laufen.
Wenn im März 1893 CET (Berlin) nicht existiert - warum new DateTime(1893, 3, 31, 0, 0, 0, 0) nicht die Zeitzone auswählen, die die Zeit übereinstimmt i angegeben (das heißt 0 Minuten und 0 Sekunden)

?

Was sind meine Optionen, um die richtige Zeit mit Datetime zu bekommen?

- EDIT -
Das Problem scheint die toDate zu sein (). Ich hatte es bearbeitet, bevor die Frage der Veröffentlichung.
Joda selbst tatsächlich funktioniert:

new DateTime(1893, 3, 31, 0, 0, 0, 0);
=>  1893-01-01T00:00:00.000+00:53:28

Es ist nur so, dass die Umstellung auf Datum Teil des Offset in Minuten und Sekunden bewegt.

War es hilfreich?

Lösung

Wenn Sie keine Zeitzone angeben, leider Joda Zeit verwendet das System ein. Und ja, Berlin wirklich haben ändern an daß die Zeit (und um 6 Minuten und 32 Sekunden). Sie haben also eine lokale Zeit anzugeben, die nicht existiert.

Was meinst du mit „warum nicht [...], um die Zeitzone auswählen, die die Zeit übereinstimmt ich angegeben?“ - die Zeitzone beeinflusst, wie lokale Zeit auf UTC abgebildet. In der Zeitzone implizit angegeben (indem sie es Ihr System Standard-Pick), dass die Zeit noch nicht existierte; keine UTC Instant Karten zu diesem Ortszeit. Es gibt eine beliebige Anzahl von Zeitzonen, die würde , dass die lokale Zeit Karte - wie würde Joda wissen, was man wählen

Ich bin damit einverstanden, dass das System Standard-Zeitzone verwendet, ist eine schlechte Bewegung auf Joda ist Teil (und den wir in festen Noda Zeit ), aber der ganze Rest des Verhaltens ist absolut in Ordnung. (Noda Zeit hat eine spezifische Ausnahme für diese genau Situation es zu unterscheiden von in Werten vorbei, die mehr offensichtlich schlecht sind, aber es uns gehen.)

Wenn Sie keine Zeitzonen wollen in sie einzutreten an alle , dann sollten Sie einen LocalDateTime stattdessen verwenden.

Andere Tipps

Haben Sie versucht, das Element mit new DateTime(1893, 4, 1, 0, 0, 0, 0, DateTimeZone.UTC); Instancing?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top