Hier ist die einzige richtige Antwort, durch eigene Tests gefunden:
DateTime a = new DateTime(); // uses default time zone
System.out.println(a); // 2014-01-08T19:38:00.696+01:00
DateTime b = DateTime.parse(a.toString());
System.out.println(b); // 2014-01-08T19:38:00.696+01:00
System.out.println(a.getChronology()); // ISOChronology[Europe/Berlin]
System.out.println(b.getChronology()); // ISOChronology[+01:00]
System.out.println(a.equals(b)); // false!!!
ich angenommen habe in Scala, dass der Vergleich von == bedeutet in der Tat Vergleich von equals() als @ aris1348880 hat in seinem Kommentar erwähnt, Daher habe ich in der Übersetzung den Java-Code entsprechend dem Operator ersetzt.
So ist die Ursache der fehlgeschlagenen equals() - Vergleich liegt auf der Hand: Es ist die Zeitzone-ID, die nicht korrekt a
im toString()
-Methode von DateTime
Objekt gedruckt wird. Ich betrachte es als einen Fehler in JodaTime, weil toString()
immer den gesamten Status eines unveränderlichen Wertobjekts drucken sollte. Übrigens, in diesem Detail ist das alte java.util.Date
noch schlechter! Nun, als Workaround können Sie die Format-Engine von JodaTime verwenden, um korrekt auszudrucken.
Das Datetime-Konstruktor verwendet die Standard-Zeitzone (in meinem Test Europe/Berlin):
System.out.println(
DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'['ZZZ']'").print(a));
// Output: 2014-01-08T19:38:00.696[Europe/Berlin]
Um das Verhalten deutlicher zu machen. Seine toString() - Methode druckt stattdessen den Offset, nicht die Echtzeitzone (das ist das Problem).
Die DateTime-parse() - Methode verwendet gemäß der JodaTime-Dokumentation ISODateTimeFormat#dateTimeParser(), die wiederum nur Offsets parsen kann, aber in diesem Code wurde sie auch nur mit Versatzinformationen gespeist, nicht mit der Echtzeitzone, sonst würde das Parsing habe mit einer Ausnahme aufgehört.
In beiden Fällen werden Instanzen von DateTime mit unterschiedlichen Zeitzonen/Offsets und damit unterschiedlichen Chronologien erstellt. So ist das equals() - Ergebnis auf den ersten Blick erstaunlich, aber verständlich.
könnte es sein, weil Sie mit '==' anstelle von 'equals' vergleichen? – gtgaxiola
Versuchen Sie mit 'equals' –
Wenn Sie Scala verwenden, wie es scheint, können Sie Ihre Frage entsprechend markieren, um Verwirrung zu vermeiden. –