- import java.time.Month;
- import java.time.Year;
- import java.time.LocalDate;
- import java.time.DateTimeException;
- import java.time.temporal.TemporalQuery;
- import java.time.temporal.TemporalAccessor;
- import java.io.PrintStream;
- public class CheckDate {
-     public static void main(String[] args) {
-         Month month = null;
-         LocalDate date = null;
-         if (args.length < 2)
-         {
-             System.out.printf("Usage: CheckDate <month> <day>%n");
-             throw new IllegalArgumentException();
-         }
-         try {
-             month = Month.valueOf(args[0].toUpperCase());
-         } catch (IllegalArgumentException exc) {
-             System.out.printf("%s is not a valid month.%n", args[0]);
-             throw exc;    // Rethrow the exception.
-         }
-         int day = Integer.parseInt(args[1]);
-         try {
-             date = LocalDate.of(Year.now().getValue(), month, day);
-         } catch (DateTimeException exc) {
-             System.out.printf("%s %s is not a valid date.%n", month, day);
-             throw exc;     // Rethrow the exception.
-         }
-         // Invoking the query without using a lambda expression.
-         Boolean isFamilyVacation = date.query(new FamilyVacations());
-         // Invoking the query using a lambda expression.
-         Boolean isFamilyBirthday = date.query(FamilyBirthdays::isFamilyBirthday);
-         if (isFamilyVacation.booleanValue() || isFamilyBirthday.booleanValue())
-             System.out.printf("%s is an important date!%n", date);
-         else
-             System.out.printf("%s is not an important date.%n", date);
-     }
- }
- import java.time.Month;
- import java.time.Year;
- import java.time.LocalDate;
- import java.time.DateTimeException;
- import java.time.temporal.TemporalQuery;
- import java.time.temporal.TemporalAccessor;
- import java.time.temporal.ChronoField;
- import java.io.PrintStream;
- import java.lang.Boolean;
- public class FamilyVacations implements TemporalQuery<Boolean> {
-     // Returns true if the passed-in date occurs during one of the
-     // family vacations. Because the query compares the month and day only,
-     // the check succeeds even if the Temporal types are not the same.
-     // 如果传入日期恰好处于家庭假期的时间段内,返回true
-     // 因为查询比较的是月份和日份,即使针对是不同类型“期间”,检查也会成功
-     public Boolean queryFrom(TemporalAccessor date) {
-         int month = date.get(ChronoField.MONTH_OF_YEAR);
-         int day   = date.get(ChronoField.DAY_OF_MONTH);
-         // Disneyland over Spring Break
-         if ((month == Month.APRIL.getValue()) && ((day >= 3) && (day <= 8)))
-             return Boolean.TRUE;
-         // Smith family reunion on Lake Saugatuck
-         if ((month == Month.AUGUST.getValue()) && ((day >= 8) && (day <= 14)))
-             return Boolean.TRUE;
-         return Boolean.FALSE;
-     }
- }
- import java.time.Month;
- import java.time.Year;
- import java.time.LocalDate;
- import java.time.DateTimeException;
- import java.time.temporal.TemporalQuery;
- import java.time.temporal.TemporalAccessor;
- import java.time.temporal.ChronoField;
- import java.io.PrintStream;
- import java.lang.Boolean;
- public class FamilyBirthdays {
-     // Returns true if the passed-in date is the same as one of the
-     // family birthdays. Because the query compares the month and day only,
-     // the check succeeds even if the Temporal types are not the same.
-     public static Boolean isFamilyBirthday(TemporalAccessor date) {
-         int month = date.get(ChronoField.MONTH_OF_YEAR);
-         int day   = date.get(ChronoField.DAY_OF_MONTH);
-         // Angie's birthday is on April 3.
-         if ((month == Month.APRIL.getValue()) && (day == 3))
-             return Boolean.TRUE;
-         // Sue's birthday is on June 18.
-         if ((month == Month.JUNE.getValue()) && (day == 18))
-             return Boolean.TRUE;
-         // Joe's birthday is on May 29.
-         if ((month == Month.MAY.getValue()) && (day == 29))
-             return Boolean.TRUE;
-         return Boolean.FALSE;
-     }
- }