web-dev-qa-db-ja.com

LocalDateインスタンスを比較する方法Java 8

私は日付が非常に正確である必要があるアプリを書いていますが、LocalDateインスタンスをどのように比較できますか..今のところ私は次のようなものを使用していました:

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

しかし、私は私のアプリが私にいくつかの混乱した結果を与えていることに気づきました、そしてそれは比較する日付のためだと思います。

私は1970年代から長い時間を取得し、それら2つを比較することを考えていますが、私はもっと簡単にならなければなりません。

58
azalut

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値を確認するだけであることに注意してください。それでも奇妙な結果が得られる場合(そうすべきではありません)、入力と出力の例を添付してください

83
royB
LocalDate ld ....;
LocalDateTime ldtime ...;

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

このスニペットは、日付の比較が3つ以上のエントリにまたがる状況でも役立つと思います。

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;
}
0
Chigozie D.