web-dev-qa-db-ja.com

日付が10年より古く、20年より新しいかどうかを確認します

チェックインしようとしているJava 8日付が10年以上20年以上の場合。Date.before() And Date.after()と_currentDate-10_ yearsおよび_currentDate-20_ yearsを引数として渡します。

before()メソッドとafter()メソッドで渡すために、日付形式で10年と20年の日付を取得する最もクリーンな方法を誰かが提案できますか?

24
Andy897

Calendar を使用すると、現在の日付から10年前の日付と20年前の日付を簡単に取得できます。

_Calendar calendar  = Calendar.getInstance();
calendar.add(Calendar.YEAR, -10);
Date d1 = calendar.getTime();
calendar.add(Calendar.YEAR, -10);
Date d2 = calendar.getTime();
_

Java 8を使用しているため、 LocalDate も使用できます。

_    LocalDate currentDate = LocalDate.now();
    Date d1 = Date.from(currentDate.minusYears(10).atStartOfDay(ZoneId.systemDefault()).toInstant());
    Date d2 = Date.from(currentDate.minusYears(20).atStartOfDay(ZoneId.systemDefault()).toInstant());
_

比較のために、あなたが言ったようにdate.after()date.before()メソッドを使うことができます。

_    if(date.after(d1) && date.before(d2)){  //date is the Date instance that wants to be compared
        ////
    }
_

before()およびafter()メソッドは、CalendarおよびLocalDateにも実装されています。 _Java.util.Date_インスタンスに変換することなく、これらのインスタンスでこれらのメソッドを使用できます。

20
Ramesh-X

Java.time.LocalDate を使用してこれを行うことができます。例:2005年1月1日がその期間の間にあるかどうかを確認する必要がある場合は、次を使用できます。

LocalDate date = LocalDate.of(2005, 1, 1); // Assign date to check
LocalDate today = LocalDate.now();

if (date.isBefore(today.minusYears(10)) && date.isAfter(today.minusYears(20))) {
  //Do Something
}
33
dkulkarni

別の可能性は、チェックする日付と上限日の間の年数を取得することです。年の数が0より大きく10より小さい場合、チェックする日付が10年より古いが20年より新しいことを意味します。

このコードは、間隔内の日付を決定します]now - 20 years ; now - 10 years[

public static void main(String[] args) {
    LocalDate dateToCheck = LocalDate.now().minusYears(20).plusDays(1);

    LocalDate upperYear = LocalDate.now().minusYears(10);
    long yearCount = ChronoUnit.YEARS.between(dateToCheck, upperYear);
    if (yearCount > 0 && yearCount < 10) {
        System.out.println("date is older than 10 years and newer than 20 years");
    }
}
4
Tunaki