如何比较 LocalDate 实例 Java 8

How to compare LocalDate instances Java 8

我正在编写一个需要非常准确的日期的应用程序,我想知道如何比较 LocalDate 实例。现在我使用的是:

LocalDate localdate1 = LocalDate().now();
LocalDate localdate2 = someService.getSomeDate();
localdate1.equals(localdate2);

但我注意到我的应用程序给出了一些令人困惑的结果,我认为这是因为日期比较。

我正在考虑获取从1970年开始的时间long并比较这两个,但我肯定更容易,我确信

使用equals() LocalDate 确实覆盖等于:

int compareTo0(LocalDate otherDate) {
    int cmp = (year - otherDate.year);
    if (cmp == 0) {
        cmp = (month - otherDate.month);
        if (cmp == 0) {
            cmp = (day - otherDate.day);
        }
    }
    return cmp;
}

如果您对 equals() 的结果不满意,您可以使用 LocalDate 的预定义方法。

请注意,所有这些方法都使用 compareTo0() 方法,只需检查 cmp 值即可。如果你仍然得到奇怪的结果(你不应该这样),请附上输入和输出的例子

我相信这个片段在日期比较跨越两个以上条目的情况下也会有所帮助。

static final int COMPARE_EARLIEST = 0;

static final int COMPARE_MOST_RECENT = 1;


public LocalDate getTargetDate(List<LocalDate> datesList, int comparatorType) { 
   LocalDate refDate = null;
   switch(comparatorType)
   {
       case COMPARE_EARLIEST:         
       //returns the most earliest of the date entries
          refDate = (LocalDate) datesList.stream().min(Comparator.comparing(item -> 
                      item.toDateTimeAtCurrentTime())).get();
          break;

       case COMPARE_MOST_RECENT:
          //returns the most recent of the date entries 
          refDate = (LocalDate) datesList.stream().max(Comparator.comparing(item -> 
                    item.toDateTimeAtCurrentTime())).get();
          break;
   }

   return refDate;
}
LocalDate ld ....;
LocalDateTime ldtime ...;

ld.isEqual(LocalDate.from(ldtime));