检查 java 中没有时间的日期范围并使用 jodatime

Check date range in java without time AND using jodatime

我有一个由用户提供的日期,当然还有今天的日期。 我正在尝试验证这 2 天之间的差异是否至少为 2 周。我已经使用标准库完成了这项工作 - 但我正在尝试使用 jodaTime 完成这项工作,但我遇到了一些困难。

// BAD CODE - doesn't work       
// NOTE: getUserSuppliedDate() returns an instance of java.sql.Date
// Also assume that validation prior to this call has been run that 
// validates that the userSuppliedDate comes AFTER today's date - not sure if 
// that is relevant in the context I'm attempting to use these particular jodaTime APIs.
DateTime jodaStartDate = new DateTime(getUserSuppliedDate());
if (Days.daysBetween(jodaStartDate, DateTime.now()).isLessThan(Days.days(14))) {
    System.out.println("Bad user.  You have chosen...poorly.");
}
else {
   System.out.println("Well done user. You have supplied wisely.");
}

// GOOD CODE  ---- ?  Help =)

您的代码给出了错误的结果,因为提供给 Days.daysBetween() 的日期顺序错误。由于您指定用户提供的日期在当前日期之后,您的方法将导致负数天数。

如果您切换顺序,将最早的日期放在第一位,它将正常工作。

比较以下两个:

DateTime jodaStartDate = new DateTime().withYear(2018)
                                       .withMonthOfYear(7)
                                       .withDayOfMonth(5); // 15 days from now

System.out.println(Days.daysBetween(jodaStartDate, DateTime.now())); // "P-15D"    
System.out.println(Days.daysBetween(DateTime.now(), jodaStartDate)); // "P15D"

在第一种情况下,-15 天将计算为少于 14 天。

用几周而不是几天,你会 运行 遇到同样的问题:

System.out.println(Weeks.weeksBetween(jodaStartDate, DateTime.now())); // "P-2W"
System.out.println(Weeks.weeksBetween(DateTime.now(), jodaStartDate)); // "P2W"