2013-07-04 8 views
8

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:

cevap

1

Joda Time sürüm 2.2 ise mili saniye, kronolojik ve zaman dilimi karşılaştırır eşittir, ancak mili saniye karşılaştıran bir isEqual yöntemi vardır GregorianCalender. Daha fazla araştırmamı isterseniz bir yorum bırakın.

İlgili konular