检查 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"
我有一个由用户提供的日期,当然还有今天的日期。 我正在尝试验证这 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"