Bugün JodaTime ile karıştırmasını ve bu testi geçmesi beklenen:Joda DateTime'ı Takvim'e dönüştürme ve yüzyılı neden CenturyOfEra alanını değiştiriyor ve başka bir şey yok?
@Test
public void dateTimeShouldRoundTrip() {
DateTime originalDateTime = new DateTime(2013, 7, 4, 0, 0);
DateTime roundTrip = new DateTime(originalDateTime.toGregorianCalendar());
assertThat(roundTrip, is(originalDateTime));
}
Ama başarısız olur. JodaTime 2.1 ve 2.2'nin her ikisinde de kontrol ettim.
ayrıntılı muayene (SamePropertyValuesAs eşleyici kullanarak) arızası centuryOfEra
özelliğinde bir farkın sebep olduğunu göstermektedir:
originalDateTime.getCenturyOfEra(); // 20
roundTrip.getCenturyOfEra(); // 21
Peki neden yapar bu mülkiyet değişikliği olduğunda her şey - yıl, ay, gün, haftanın günü, saat dilimi vb. - değil mi? Bu bir hata mı? Bir DateTime'ı bir Takvime dönüştürebilir ve tekrar geri dönemez misiniz? veya bir dönüştürme ile korunmaz
DateTime d = new DateTime();
new DateTime(d.toGregorianCalendar()).isEqual(d); // returns true
new DateTime(d.toGregorianCalendar()).equals(d); // returns false, as you observed
Yani ya kronolojik veya zaman dilimi: