Убедитесь, что дата старше 10 лет и не старше 20 лет.
Я пытаюсь проверить Java 8, если дата старше 10 лет и не старше 20 лет. Я использую Date.before()
И Date.after()
и передаю currentDate-10
years и currentDate-20
years в качестве аргументов.
Может кто-нибудь, пожалуйста, предложите, какой самый чистый способ получить дату, которая составляет 10 лет и 20 лет в формате Date, передать ее в мои методы before()
и after()
?
Ответы
Ответ 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");
}
}