我正在尝试使用最新版本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次以获得不同的值,但为什么这个?
非常感谢。
答案 0 :(得分:2)
我的猜测是,有时,today
和born
日期完全相同的毫秒,有时它们相差几毫秒(第一次调用{{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时间类完全。