gpt4 book ai didi

java - Joda 中的“负”持续时间,是错误还是功能?

转载 作者:行者123 更新时间:2023-12-03 02:00:25 25 4
gpt4 key购买 nike

当尝试比较两个日期时间时,我编写了这段代码

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

因此,当我查看 Duration CTOR 时,发现它实际上创建了一个具有负毫秒持续时间的 Duration(getMils() 返回 -ve)。

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

最佳答案

对我来说听起来完全合理。您将负数毫秒传递给构造函数 - 为什么您期望它变为正数?

负持续时间只是负时间量 - 例如,从“现在”到“过去某个时间”的时间。它允许进行合理的算术:

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 - 或者在您的情况下,根本不要对 d1 使用 Duration :

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

关于java - Joda 中的“负”持续时间,是错误还是功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34629281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com