2012-01-03 61 views
0

我运行了一个快速的测试daysBetween功能在乔达时间库和我得到不一致的结果。其他人是否也有同样的问题?以下是我用于测试的代码。乔达时间 - 不一致的结果

public static int elapsedDaysJoda() { 
    DateTime dt1 = new DateTime(new Date());   
    Calendar cal = Calendar.getInstance(); 
    cal.set(2011, 0, 1); 
    DateTime dt2 = new DateTime(cal.getTime()); 
    Days days = Days.daysBetween(dt2, dt1); 
    return days.getDays(); 
} 

public static void main(String[] args) { 
    for(int i=0; i < 10; i++) { 
     System.out.println(elapsedDaysJoda()); 
    } 
} 

回答

3

首先,也是最主要的问题:你问的Java“当前日期时间”两次,new Date()Calendar.getInstance(),并且你不能肯定这两个调用将返回完全相同的瞬间,或者如果他们能几毫秒不等。

此外,因为您使用的是DateTime而不是LocalDate,所以几毫秒的差异可能会改变经过日期的计算。如果您(概念上)处理日间差异,而您不关心时间(h:m:s.sss),那么您最好使用LocalDate

第一个问题可以通过询问的Java当前datime只有一次解决:

public static int elapsedDaysJoda() { 
    Calendar cal = Calendar.getInstance(); 
    DateTime dt1 = new DateTime(cal); 
    cal.set(2011, 0, 1); 
    DateTime dt2 = new DateTime(cal.getTime()); 
    Days days = Days.daysBetween(dt2, dt1); 
    return days.getDays(); 
} 

在另外(或者替代;这还修复了不一致的结果),你可以使用LocalDate代替DateTime

+0

谢谢你的明确解释。 LocalDate是我需要的。 – carbotex 2012-01-04 01:43:21