我想知道是否有任何标准 APIJodaTime
来比较DateTime
具有指定容差的 2 个对象?我正在寻找一种最好使用Joda
标准 API 的单线。不适用于这篇文章中的时间算术表达式。
理想情况下,它会是这样的:
boolean areNearlyEqual = SomeJodaAPIClass.equal(dt1, dt2, maxTolerance);
谢谢!
用这个:
new Duration(dt1, dt2).isShorterThan(Duration.millis(maxTolerance))
这篇文章很旧,但我发现接受的解决方案中的行有点长,我发现现有的东西没有更好的。所以我做了一个为 Date 和 DateTime 包装它的小类:
public class DateTimeUtils
{
public static boolean dateIsCloseToNow(Date dateToCheck,
Duration tolerance)
{
return dateIsCloseToNow(new DateTime(dateToCheck), tolerance);
}
public static boolean dateIsCloseToNow(DateTime dateToCheck,
Duration tolerance)
{
return datesAreClose(dateToCheck, DateTime.now(), tolerance);
}
public static boolean datesAreClose(Date date1,
Date date2,
Duration tolerance)
{
return datesAreClose(new DateTime(date1), new DateTime(date2), tolerance);
}
public static boolean datesAreClose(DateTime date1,
DateTime date2,
Duration tolerance)
{
if (date1.isBefore(date2)) {
return new Duration(date1, date2).isShorterThan(tolerance);
}
return new Duration(date2, date1).isShorterThan(tolerance);
}
所以这一行:
new Duration(date.getTime(), System.currentTimeMillis()).isShorterThan(Duration.standardSeconds(5)
变成:
DateUtils.dateIsCloseToNow(date, Duration.standardSeconds(5))
我发现这在需要验证创建日期的单元测试用例中非常有用。