这篇文章很老,但是我发现接受方案中的行有点长,在现有的内容中找不到更好的东西。因此,我写了一个小类来封装日期和时间:
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))
我发现这在单元测试案例中非常有用,特别是当我需要验证创建日期时。
java.util.Date
和LocalDate
混淆。我也可能会说“AreClose”而不是“AreEqual”,并且“IsCloseToNow”而不是“IsNow”。 - Basil Bourque