Подтвердить что ты не робот

Убедитесь, что дата старше 10 лет и не старше 20 лет.

Я пытаюсь проверить Java 8, если дата старше 10 лет и не старше 20 лет. Я использую Date.before() И Date.after() и передаю currentDate-10 years и currentDate-20 years в качестве аргументов.

Может кто-нибудь, пожалуйста, предложите, какой самый чистый способ получить дату, которая составляет 10 лет и 20 лет в формате Date, передать ее в мои методы before() и after()?

4b9b3361

Ответ 1

Используя 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.

Ответ 2

Вы можете использовать java.time.LocalDate для этого. Пример. Если вам нужно проверить, соответствует ли 01/01/2005 этой длительности, вы можете использовать

LocalDate date = LocalDate.of(2005, 1, 1); // Assign date to check
if(date.isBefore(today.minusYears(10)) && date.isAfter(today.minusYears(20)))
  //Do Something

Ответ 3

Другая возможность - получить счет года между датой проверки и верхней датой. Если число года больше 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");
    }
}