为什么JodaTime和Calendar会返回不同的结果

ryb*_*ber 11 java time calendar jodatime

为什么此测试失败:

    DateTime dateTime = new DateTime(1997,01,01,00,00,00,00, DateTimeZone.UTC);
    long jodaMills = dateTime.getMillis();

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    cal.set(1997,01,01,00,00,00);
    long calMills = cal.getTimeInMillis();

    Assert.assertEquals(jodaMills, calMills);
Run Code Online (Sandbox Code Playgroud)

我得到的结果是:预期:852076800000实际:854755200964

它们不应该是相同的数字吗?

Cod*_*nci 22

日历基于零的月份,JodaTime月份字段从1开始.

因此,在JodaTime中,1月是1月,但在日历中,1月是0月.

因此,在您的示例中,您将比较1月1日2月1日,因此值的差异.

由于JodaTime被设置为零,但是Calendar对象不是,因此还存在毫秒差异.


Ami*_*far 13

两个原因:

  1. Joda有一个月的基础.所以你需要改变它.

  2. 日历设计很差.您没有将秒的毫秒数设置为0.cal.set(MILLISECOND, 0)

这是javadoc

public final void set(int year,int month,int date,int hourOfDay,int minute,int second)

哪个缺少毫秒字段.