每次迭代时JODA的时间值都是错误的

时间:2013-04-05 16:14:28

标签: java calendar jodatime

我正在尝试使用最新版本2.2的Joda时间我在这里写了一个小片段是我的代码

public static void main(String[] args) 
{
    BoilerTester clazz = new BoilerTester();
    Calendar today = Calendar.getInstance();
    Calendar born  = Calendar.getInstance();
    //when returns 0 is 10363 when returning 1 = 10362 just a millisecond what have to do with days??
    System.out.println(Math.abs(today.getTimeInMillis()-born.getTimeInMillis()));
    born.set(1984,10,20);        
    clazz.compute(born,today);
}   
private void compute(Calendar born, Calendar today)
{
    System.out.println("JODA:  " + org.joda.time.Days.daysBetween(new org.joda.time.DateTime(born.getTime()),new org.joda.time.DateTime(today.getTime())).getDays());    
}

当我运行源代码时,我得到了这个值

  

JODA:10363

稍后我运行相同的代码,我正在

  

JODA:10362

是的,我可能运行相同代码的2或3次以获得不同的值,但为什么这个?

非常感谢。

3 个答案:

答案 0 :(得分:2)

我的猜测是,有时,todayborn日期完全相同的毫秒,有时它们相差几毫秒(第一次调用{{1}之间经过的时间和第二个)。由于getDays()返回完整天数,因此几毫秒可能会有所不同。

答案 1 :(得分:1)

我正在写我的答案,但JB Nizet更快(他对正在发生的事情绝对正确)。如果你想摆脱这类问题,你应该在joda-time中利用partial的概念:

Joda-Time中的部分是部分日期和时间表示。所有实现都代表本地日期和时间,并且不引用时区。因此,它们仅部分代表日期时间连续体中的日期或时间。

例如,使用LocalDate

LocalDate born = new LocalDate(1984, 11, 20); // BE CAREFUL!: months in JDK are 0-11, but in Joda-Time are 1-12
System.out.println(Days.daysBetween(born, LocalDate.now()).getDays());

使用此“部分”表示,您不会在内部使用小时,分钟,秒或毫秒,因此您无法在几毫秒内遇到此问题。

答案 2 :(得分:0)

你正在运行JDK和Joda的混合 - 不要这样做 - Joda取代JDK时间类完全