如何检查过去是否有两个 LocalDates?
How do I check if two LocalDates are in the past?
我目前正在编程避免错误。所以我有两个 LocalDates:from 和 until 我想检查其中一个是否在过去。
这是我的方法。但是某处似乎有错误,因为如果我 select 过去的 "from" 的 LocalDate,我会得到一个错误的回复。
private static boolean isPast(LocalDate from, LocalDate until) {
if (LocalDate.now().isAfter(from) || LocalDate.now().isAfter(until)) {
return true;
} else {
return false;
}
}
在您的 bean 日期字段上使用 javax 注释 @Future
和 @Past
会更干净。
参见:
https://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html
或者你可以这样写:
private static boolean atLeastOneInThePast(LocalDate from, LocalDate until) {
LocalDate today = LocalDate.now();
return today.isAfter(from) || today.isAfter(until);
}
这是23:59一致的。并允许轻松调试 today
.
如果 from
是昨天的话,您的代码似乎没问题。因此只有您的系统时钟 LocalDate.now()
可能关闭。
这是测试。您想检查您的某个日期是否已过去。你的方法有效。
LocalDate a = LocalDate.of(2010, 1, 10); // past
LocalDate b = LocalDate.of(2030, 2, 10); // future
System.out.println(isPast(a,b)); // prints true
a = LocalDate.of(2030, 1, 10); // future
b = LocalDate.of(2010, 2, 10); // past
System.out.println(isPast(a,b)); // prints true
a = LocalDate.of(2030, 1, 10); // future
b = LocalDate.of(2030, 2, 20); // future
System.out.println(isPast(a,b)); // prints false
a = LocalDate.of(2010, 1, 10); // past
b = LocalDate.of(2010, 2, 10); // past
System.out.println(isPast(a,b)); // prints true
根据您指定日期的方式,可能存在粒度或时区问题。
我目前正在编程避免错误。所以我有两个 LocalDates:from 和 until 我想检查其中一个是否在过去。
这是我的方法。但是某处似乎有错误,因为如果我 select 过去的 "from" 的 LocalDate,我会得到一个错误的回复。
private static boolean isPast(LocalDate from, LocalDate until) {
if (LocalDate.now().isAfter(from) || LocalDate.now().isAfter(until)) {
return true;
} else {
return false;
}
}
在您的 bean 日期字段上使用 javax 注释 @Future
和 @Past
会更干净。
参见: https://docs.oracle.com/javaee/7/api/javax/validation/constraints/package-summary.html
或者你可以这样写:
private static boolean atLeastOneInThePast(LocalDate from, LocalDate until) {
LocalDate today = LocalDate.now();
return today.isAfter(from) || today.isAfter(until);
}
这是23:59一致的。并允许轻松调试 today
.
如果 from
是昨天的话,您的代码似乎没问题。因此只有您的系统时钟 LocalDate.now()
可能关闭。
这是测试。您想检查您的某个日期是否已过去。你的方法有效。
LocalDate a = LocalDate.of(2010, 1, 10); // past
LocalDate b = LocalDate.of(2030, 2, 10); // future
System.out.println(isPast(a,b)); // prints true
a = LocalDate.of(2030, 1, 10); // future
b = LocalDate.of(2010, 2, 10); // past
System.out.println(isPast(a,b)); // prints true
a = LocalDate.of(2030, 1, 10); // future
b = LocalDate.of(2030, 2, 20); // future
System.out.println(isPast(a,b)); // prints false
a = LocalDate.of(2010, 1, 10); // past
b = LocalDate.of(2010, 2, 10); // past
System.out.println(isPast(a,b)); // prints true
根据您指定日期的方式,可能存在粒度或时区问题。