web-dev-qa-db-fra.com

Vérifiez si la date a plus de 10 ans et plus de 20 ans

J'essaie d'archiver Java 8 si une date est plus ancienne que 10 ans et plus récente que 20 ans. J'utilise Date.before() Et Date.after() et en passant currentDate-10 ans et currentDate-20 ans comme arguments.

Quelqu'un peut-il s'il vous plaît suggérer quelle sera la façon la plus propre d'obtenir une date de 10 ans et de 20 ans au format Date pour la passer dans mes méthodes before() et after()?

24
Andy897

En utilisant Calendar vous pouvez facilement obtenir une date de 10 ans et une date de 20 ans à partir de la date actuelle.

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

Comme vous utilisez Java 8, vous pouvez également utiliser 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());

Pour comparer, vous pouvez utiliser les méthodes date.after() et date.before() comme vous l'avez dit.

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

Les méthodes before() et after() sont également implémentées dans Calendar et LocalDate. Vous pouvez utiliser ces méthodes dans ces instances sans les convertir en instances Java.util.Date.

20
Ramesh-X

Vous pouvez utiliser Java.time.LocalDate pour ce faire. Exemple: si vous devez vérifier si le 01/01/2005 est compris entre cette durée, vous pouvez utiliser

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

Une autre possibilité consiste à obtenir le nombre d'années entre la date à vérifier et la date supérieure. Si le nombre d'années est supérieur à 0 et inférieur à 10, cela signifie que la date à vérifier est plus ancienne que 10 ans et plus récente que 20 ans.

Ce code déterminera n'importe quelle date dans l'intervalle ]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