В этой статье показан пример Java 8 и устаревших API-интерфейсов даты и времени, чтобы проверить, является ли дата на 30 дней или 6 месяцев старше текущей даты.
- 1. Java 8 находится перед()
- 2. Хроноблок Java 8.{ЕДИНИЦА ИЗМЕРЕНИЯ}.между()
- 3. Период Java 8.между()
- 4. Устаревший Календарь и Дата
- 5. Рекомендации
1. Java 8 находится перед()
Сначала минус текущая дата, а затем использует находится перед()
, чтобы проверить, является ли дата на определенный период старше текущей даты.
1.1 В этом примере проверяется, является ли дата на 6 месяцев старше текущей даты.
package com.mkyong.app; import java.time.LocalDate; public class JavaMinusMonths { public static void main(String[] args) { LocalDate currentDate = LocalDate.now(); LocalDate currentDateMinus6Months = currentDate.minusMonths(6); // 2021-03-26 System.out.println("currentDate: " + currentDate); // 2020-09-26 System.out.println("currentDateMinus6Months : " + currentDateMinus6Months); LocalDate date1 = LocalDate.of(2019, 8, 23); System.out.println("\ndate1 : " + date1); if (date1.isBefore(currentDateMinus6Months)) { System.out.println("6 months older than current date!"); } } }
Выход
currentDate: 2021-03-26 currentDateMinus6Months : 2020-09-26 date1 : 2019-08-23 6 months older than current date!
1.2 В этом примере проверяется, является ли дата на 30 дней старше текущей даты.
package com.mkyong.app; import java.time.LocalDate; public class JavaMinusDays { public static void main(String[] args) { LocalDate currentDate = LocalDate.now(); LocalDate currentDateMinus30Days = currentDate.minusDays(30); // 2021-03-26 System.out.println("currentDate: " + currentDate); // 2020-09-26 System.out.println("currentDateMinus30Days : " + currentDateMinus30Days); LocalDate date1 = LocalDate.of(2019, 8, 23); System.out.println("\ndate1 : " + date1); if (date1.isBefore(currentDateMinus30Days)) { System.out.println("30 months older than current date!"); } } }
2. Хроноблок Java 8.{ЕДИНИЦА ИЗМЕРЕНИЯ}.между()
Большинство новых API-интерфейсов даты и времени Java 8 реализованы в Временном
интерфейсе, например, Локальная дата
, Локальное время
, ZonedDateTime
и т.д. Мы можем использовать Хроноунит.{ЕДИНИЦА ИЗМЕРЕНИЯ}.между
для проверки разницы между двумя датами или Временными
объектами.
2.1 Ознакомьтесь со следующим Хроноунит.{ЕДИНИЦА ИЗМЕРЕНИЯ}.между
методами:
ChronoUnit.NANOS.between(Temporal t1, Temporal t2) ChronoUnit.MICROS.between(Temporal t1, Temporal t2) ChronoUnit.MILLIS.between(Temporal t1, Temporal t2) ChronoUnit.SECONDS.between(Temporal t1, Temporal t2) ChronoUnit.MINUTES.between(Temporal t1, Temporal t2) ChronoUnit.HOURS.between(Temporal t1, Temporal t2) ChronoUnit.HALF_DAYS.between(Temporal t1, Temporal t2) ChronoUnit.DAYS.between(Temporal t1, Temporal t2) ChronoUnit.WEEKS.between(Temporal t1, Temporal t2) ChronoUnit.MONTHS.between(Temporal t1, Temporal t2) ChronoUnit.YEARS.between(Temporal t1, Temporal t2) ChronoUnit.DECADES.between(Temporal t1, Temporal t2) ChronoUnit.CENTURIES.between(Temporal t1, Temporal t2) ChronoUnit.MILLENNIA.between(Temporal t1, Temporal t2) ChronoUnit.ERAS.between(Temporal t1, Temporal t2)
2.2 В этом примере используется Хроноунит.МЕСЯЦЕВ.между
чтобы проверить, является ли дата на 6 месяцев старше текущей даты.
package com.mkyong.app; import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class JavaChronoUnit1 { public static void main(String[] args) { LocalDate now = LocalDate.now(); // 2021-03-26 System.out.println("now: " + now); LocalDate date1 = LocalDate.of(2019, 9, 25); long months = ChronoUnit.MONTHS.between(now, date1); System.out.println(date1); System.out.println(months); if (months <= -6) { System.out.println("6 months older than current date!"); } LocalDate date2 = LocalDate.of(2020, 9, 26); long months2 = ChronoUnit.MONTHS.between(now, date2); System.out.println(date2); System.out.println(months2); if (months2 <= -6) { System.out.println("6 months older than current date!"); } } }
Выход
now: 2021-03-26 2019-09-25 -18 6 months older than current date! 2020-09-26 -6 6 months older than current date!
2.3 В этом примере используется ChronoUnit.DAYS.between
, чтобы проверить, является ли дата на 30 дней старше текущей даты.
package com.mkyong.app; import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class JavaChronoUnit2 { public static void main(String[] args) { LocalDate now = LocalDate.now(); // 2021-03-26 System.out.println("now: " + now); LocalDate date1 = LocalDate.of(2019, 9, 25); long day1 = ChronoUnit.DAYS.between(now, date1); System.out.println(date1); System.out.println(day1); if (day1 <= -30) { System.out.println("30 days older than current date!"); } LocalDate date2 = LocalDate.of(2021, 2, 25); long day2 = ChronoUnit.DAYS.between(now, date2); System.out.println(date2); System.out.println(day2); if (day2 <= -30) { System.out.println("30 days older than current date!"); } } }
Выход
now: 2021-03-26 2019-09-25 -548 30 days older than current date! 2021-02-25 -29
3. Период Java 8.между()
3.1 Прочитайте простой java.time. Период
пример, чтобы понять, как работает период.
package com.mkyong.app; import java.time.LocalDate; import java.time.Period; public class JavaPeriodExample { public static void main(String[] args) { LocalDate date1 = LocalDate.of(2020, 2, 24); LocalDate date2 = LocalDate.of(2019, 8, 23); System.out.println(date1); // 2020-02-24 System.out.println(date2); // 2019-08-23 Period period = Period.between(date1, date2); String result = String.format("%d years, %d months, %d days", period.getYears(), period.getMonths(), period.getDays()); System.out.println(result); // 0 years, -6 months, -1 days LocalDate date3 = LocalDate.of(2019, 1, 1); LocalDate date4 = LocalDate.of(2021, 3, 23); System.out.println(date3); // 2019-01-01 System.out.println(date4); // 2021-03-23 Period period2 = Period.between(date3, date4); String result2 = String.format("%d years, %d months, %d days", period2.getYears(), period2.getMonths(), period2.getDays()); System.out.println(result2); // 2 years, 2 months, 22 days } }
Выход
2020-02-24 2019-08-23 0 years, -6 months, -1 days 2019-01-01 2021-03-23 2 years, 2 months, 22 days
3.2 В этом примере используется Период
чтобы проверить, есть ли Местная дата
на 6 месяцев старше текущей даты.
package com.mkyong.app; import java.time.LocalDate; import java.time.Period; public class JavaPeriodExample2 { public static void main(String[] args) { LocalDate date1 = LocalDate.of(2020, 9, 25); System.out.println("Is 6 months older? " + isOlderThanMonths(date1, 6)); LocalDate date2 = LocalDate.of(2020, 9, 26); System.out.println("Is 6 months older? " + isOlderThanMonths(date2, 6)); LocalDate date3 = LocalDate.of(2020, 10, 26); System.out.println("Is 6 months older? " + isOlderThanMonths(date3, 6)); LocalDate date4 = LocalDate.of(2001, 10, 26); System.out.println("Is 6 months older? " + isOlderThanMonths(date4, 6)); } static boolean isOlderThanMonths(final LocalDate date, final int months) { boolean result = false; LocalDate now = LocalDate.now(); // period from now to date Period period = Period.between(now, date); System.out.println("\nNow: " + now); System.out.println("Date: " + date); System.out.printf("%d years, %d months, %d days%n", period.getYears(), period.getMonths(), period.getDays()); if (period.getYears() < 0) { // if year is negative, 100% older than 6 months result = true; } else if (period.getYears() == 0) { if (period.getMonths() <= -months) { result = true; } } return result; } }
Выход
Now: 2021-03-26 Date: 2020-09-25 0 years, -6 months, -1 days Is 6 months older? true Now: 2021-03-26 Date: 2020-09-26 0 years, -6 months, 0 days Is 6 months older? true Now: 2021-03-26 Date: 2020-10-26 0 years, -5 months, 0 days Is 6 months older? false Now: 2021-03-26 Date: 2001-10-26 -19 years, -5 months, 0 days Is 6 months older? true
4. Устаревший Календарь и Дата
4.1 В этом примере проверяется, является ли java.util. Календарь
на 6 месяцев старше текущей даты.
package com.mkyong.app; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; public class JavaCalendarExample { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public static void main(String[] args) { Calendar sixMonthsAgo = Calendar.getInstance(); // Current date // 2021-03-26 System.out.println("now: " + sdf.format(sixMonthsAgo.getTime())); // old way to minus 6 months // 2020-09-26 sixMonthsAgo.add(Calendar.MONTH, -6); System.out.println("sixMonthsAgo: " + sdf.format(sixMonthsAgo.getTime())); // 2019-06-10 Calendar date1 = new GregorianCalendar(2020, Calendar.AUGUST, 10); System.out.println("date1: " + sdf.format(date1.getTime())); if (date1.before(sixMonthsAgo)) { System.out.println("6 months older than current date!"); } } }
Выход
now: 2021-03-26 sixMonthsAgo: 2020-09-26 date1: 2020-08-10 6 months older than current date!
4.2 В этом примере проверяется, является ли java.util. Дата
на 30 дней старше текущей даты.
package com.mkyong.app; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class JavaDateExample { private static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); public static void main(String[] args) throws ParseException { Date today = new Date(); System.out.println("now : " + sdf.format(today)); // 2021-03-26 Calendar thirtyDaysAgo = Calendar.getInstance(); thirtyDaysAgo.add(Calendar.DAY_OF_MONTH, -30); // 2021-02-24 // convert Calendar to Date Date thirtyDaysAgoDate = thirtyDaysAgo.getTime(); System.out.println("thirtyDaysAgo : " + sdf.format(thirtyDaysAgoDate)); Date date1 = sdf.parse("2019-12-31"); if (date1.before(thirtyDaysAgoDate)) { System.out.println("30 days older than current date!"); } } }
Выход
now : 2021-03-26 thirtyDaysAgo : 2021-02-24 30 days older than current date!
5. Рекомендации
- Примеры даты и календаря Java
- Как сравнить даты в Java
- Как рассчитать денежные значения на Java
- Java – Как узнать текущую дату и время
- Локальная дата
- Локальное время
- Дата в зоне
- Период
- Хроноблок
Оригинал: “https://mkyong.com/java8/java-check-if-the-date-is-older-than-6-months/”