我今天和JodaTime混在一起,我希望这个测试能通过:
@Test
public void dateTimeShouldRoundTrip() {
DateTime originalDateTime = new DateTime(2013, 7, 4, 0, 0);
DateTime roundTrip = new DateTime(originalDateTime.toGregorianCalendar());
assertThat(roundTrip, is(originalDateTime));
}但失败了。我在JodaTime 2.1和2.2下检查了它。
进一步检查(使用SamePropertyValuesAs匹配程序)表明,故障是由centuryOfEra属性的差异造成的:
originalDateTime.getCenturyOfEra(); // 20
roundTrip.getCenturyOfEra(); // 21那么,为什么这个属性会改变,而其他的东西这是个虫子吗?您不应该能够往返DateTime到日历然后再回来吗?
发布于 2013-07-04 05:44:06
Joda时间版本2.2有一个只比较毫秒的isEqual方法,而等于比较毫秒、时间顺序和时区:
DateTime d = new DateTime();
new DateTime(d.toGregorianCalendar()).isEqual(d); // returns true
new DateTime(d.toGregorianCalendar()).equals(d); // returns false, as you observed因此,无论是年表还是时区,都不会在转换到或从GregorianCalender时保留下来。如果你想让我进一步调查的话,请留下评论。
https://stackoverflow.com/questions/17462412
复制相似问题