我如何判断一个 joda-time DateTime 对象是不是在另一个对象的 4 小时内?

Posted

技术标签:

【中文标题】我如何判断一个 joda-time DateTime 对象是不是在另一个对象的 4 小时内?【英文标题】:How can i tell if one joda-time DateTime object is within 4 hours of another?我如何判断一个 joda-time DateTime 对象是否在另一个对象的 4 小时内? 【发布时间】:2010-12-02 03:39:09 【问题描述】:

如果我不知道哪个对象早于另一个对象,那么判断一个 joda 时间 DateTime 对象是否在另一个对象的 4 小时内的最佳方法是什么?

如果我知道对象 A 在对象 B 之前,Joda Time Duration 对象似乎可以很好地完成这项工作,但是由于 Duration 已签名,如果我不知道顺序,它似乎不会做我想做的事。

似乎有一个简单的方法可以做到这一点,但我还没有找到。

【问题讨论】:

【参考方案1】:

只需使用 Hours 类即可:

Hours h = Hours.hoursBetween(date1, date2); 
int hours = h.getHours();

【讨论】:

完美!正是我想要的。 我注意到了一点警告。场景 1:(time1 = 4:00:00) 和 (time2 = 8:00:00)。这给了你 4 个小时 - 这里没问题。但是在场景 2:(time1 = 4:00:00) 和 (time2 = 8:30:00) 中,当实际时间为 4 小时 30 分钟时,您仍然可以获得 4 小时 - 这超出了您的时间范围。你可能会得到一个额外的(不需要的)小时。 我注意到这个关于经过时间的问题:***.com/questions/2179644/… 有没有办法查明一天中的当前时间是否在一天中的两个给定小时之间?例如6 介于 21 和 9 之间,所以函数应该返回 true。 肯定有。您可以将此作为关于 SO 的单独问题以及您尝试过的问题提出。【参考方案2】:

您可以在两个 DateTime 对象上使用 compareTo() 方法来判断哪个更早,然后使用 Duration 来查看它们是否在 4 小时内。

【讨论】:

感谢 mR_fr0g,当然也可以正常工作,但还是有点笨拙。【参考方案3】:

尝试以下方法:

if (Math.abs(new Duration(start, end).getStandardSeconds()) < 4 * 3600) 
  // blah blah blah

【讨论】:

以上是关于我如何判断一个 joda-time DateTime 对象是不是在另一个对象的 4 小时内?的主要内容,如果未能解决你的问题,请参考以下文章

Joda-Time 中两个日期之间的天数

我应该用threeten代替joda-time吗

Joda-Time开源库

使用 Joda-Time 计算持续时间

Joda-Time、夏令时更改和日期时间解析

Joda-Time 库指定 mili 秒精度