如何检查过去是否有两个 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

根据您指定日期的方式,可能存在粒度或时区问题。