首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么将Joda DateTime转换为Calendar和back会改变centuryOfEra字段,而不是其他任何东西?

为什么将Joda DateTime转换为Calendar和back会改变centuryOfEra字段,而不是其他任何东西?
EN

Stack Overflow用户
提问于 2013-07-04 05:24:00
回答 1查看 1.8K关注 0票数 8

我今天和JodaTime混在一起,我希望这个测试能通过:

代码语言:javascript
复制
@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属性的差异造成的:

代码语言:javascript
复制
originalDateTime.getCenturyOfEra(); // 20
roundTrip.getCenturyOfEra(); // 21

那么,为什么这个属性会改变,而其他的东西这是个虫子吗?您不应该能够往返DateTime到日历然后再回来吗?

EN

回答 1

Stack Overflow用户

发布于 2013-07-04 05:44:06

Joda时间版本2.2有一个只比较毫秒的isEqual方法,而等于比较毫秒、时间顺序和时区:

代码语言:javascript
复制
DateTime d = new DateTime();
new DateTime(d.toGregorianCalendar()).isEqual(d); // returns true
new DateTime(d.toGregorianCalendar()).equals(d); // returns false, as you observed

因此,无论是年表还是时区,都不会在转换到或从GregorianCalender时保留下来。如果你想让我进一步调查的话,请留下评论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17462412

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档