“负面”Joda中的持续时间,错误或功能?

时间:2016-01-06 09:10:16

标签: java datetime jodatime

当试图比较两个DateTime时,我写了这段代码

private boolean compareTime(DateTime dt1, DateTime dt2) 
{ 
    long d1 = (new Duration(dt1.getMillis() - dt2.getMillis())).getMillis();
    long d2 = Duration.standardHours(1).getMillis(); 
    return  d1  < d2; 
}
DateTime dt1 = new DateTime();
Thread.sleep(250);
DateTime dt2 = dt1.plusHours(2);
System.out.println(compareTime(dt1,dt2));
System.out.println(compareTime(dt2,dt1));

预计打印

false
false

但它是

true
false

所以当我查看持续时间CTOR时,结果发现它实际上创建了一个持续时间为负毫秒的持续时间(getMils()返回-ve)。

-ve Duration是什么意思? (为了保持客观) 这是一个错误还是一个功能?

1 个答案:

答案 0 :(得分:5)

听起来对我来说完全合理。您正在向构造函数传递负数毫秒 - 为什么期望成为正面?

负持续时间只是一个负时间 - 来自&#34;现在&#34;过去的某个时间&#34;,例如。它允许合理的算术:

Instant x = ...;
Instant y = ...;
// Duration from x to y, although the result isn't "anchored" (it forgets x and y)
Duration d = new Duration(x, y);
Instant y2 = x.plus(d); // y2 is now equal to y

没有负面持续时间,这是不可能的。

如果你总是想要一个非负面的持续时间,只需致电Math.abs - 或者在你的情况下,根本不要Duration使用d1

long d1 = Math.Abs(dt1.getMillis() - dt2.getMillis());