集册 Java实例教程 Java查询查找家庭休假日期

Java查询查找家庭休假日期

欢马劈雪     最近更新时间:2020-01-02 10:19:05

570
Java查询查找家庭休假日期

import java.time.Month;/* 来自 时 代 J     a    v  a - nowjava.com*/

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;

import java.time.Month;

import java.time.Year;

import java.time.LocalDate;

import java.time.DateTimeException;
/**n  o  w  j  a  v  a . c o m**/

import java.time.temporal.TemporalQuery;

import java.time.temporal.TemporalAccessor;

import java.time.temporal.ChronoField;


import java.io.PrintStream;

import java.lang.Boolean;

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;


 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;

    }

}

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.

    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;

    }

}


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);

}

}


展开阅读全文