Skip to content

Instantly share code, notes, and snippets.

@mfuzalam
Last active April 5, 2019 22:22
Show Gist options
  • Save mfuzalam/712e54279c756efa8c50e0938b317743 to your computer and use it in GitHub Desktop.
Save mfuzalam/712e54279c756efa8c50e0938b317743 to your computer and use it in GitHub Desktop.

Revisions

  1. mfuzalam revised this gist Apr 5, 2019. 1 changed file with 0 additions and 1 deletion.
    1 change: 0 additions & 1 deletion FederalHolidays.java
    Original file line number Diff line number Diff line change
    @@ -8,7 +8,6 @@

    public class FederalHolidays {


    //This gist is a slightly modified version of (https://github.com/esun9064/Federal-Holiday/tree/master/src) Federal Holiday code.
    private static Date newYearsDay(int nYear) {
    Date date;
  2. mfuzalam created this gist Apr 5, 2019.
    546 changes: 546 additions & 0 deletions FederalHolidays.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,546 @@
    package com.mfuz;

    import java.text.SimpleDateFormat;
    import java.time.LocalDate;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.GregorianCalendar;

    public class FederalHolidays {


    //This gist is a slightly modified version of (https://github.com/esun9064/Federal-Holiday/tree/master/src) Federal Holiday code.
    private static Date newYearsDay(int nYear) {
    Date date;

    Calendar cal = new GregorianCalendar(nYear, Calendar.JANUARY, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SATURDAY:
    date = (new GregorianCalendar(--nYear, Calendar.DECEMBER, 31)).getTime();

    System.out.println("New Years day for " + nYear + " is: " + date);

    return date;

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 2)).getTime();

    System.out.println("New Years day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    case Calendar.TUESDAY:
    case Calendar.WEDNESDAY:
    case Calendar.THURSDAY:
    case Calendar.FRIDAY:
    default:

    date = cal.getTime();

    System.out.println("New Years day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date martinLutherKingDay(int nYear) {
    Date date;

    // Third Monday in January
    Calendar cal = new GregorianCalendar(nYear, Calendar.JANUARY, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 16)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 15)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;

    case Calendar.TUESDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 21)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;

    case Calendar.WEDNESDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 20)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;

    case Calendar.THURSDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 19)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;

    case Calendar.FRIDAY:
    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 18)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;

    default: // Saturday

    date = (new GregorianCalendar(nYear, Calendar.JANUARY, 17)).getTime();

    System.out.println("Martin Luther King day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date presidentsDay(int nYear) {
    Date date;

    // Third Monday in February
    Calendar cal = new GregorianCalendar(nYear, Calendar.FEBRUARY, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 16)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 15)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;

    case Calendar.TUESDAY:
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 21)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;

    case Calendar.WEDNESDAY:
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 20)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;

    case Calendar.THURSDAY:
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 19)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;

    case Calendar.FRIDAY:
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 18)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;

    default: // Saturday
    date = (new GregorianCalendar(nYear, Calendar.FEBRUARY, 17)).getTime();

    System.out.println("President's day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date memorialDay(int nYear) {
    Date date;

    // Last Monday in May
    Calendar cal = new GregorianCalendar(nYear, Calendar.MAY, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.MAY, 30)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    date = (new GregorianCalendar(nYear, Calendar.MAY, 29)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;

    case Calendar.TUESDAY:
    date = (new GregorianCalendar(nYear, Calendar.MAY, 28)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;

    case Calendar.WEDNESDAY:
    date = (new GregorianCalendar(nYear, Calendar.MAY, 27)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;

    case Calendar.THURSDAY:
    date = (new GregorianCalendar(nYear, Calendar.MAY, 26)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;

    case Calendar.FRIDAY:
    date = (new GregorianCalendar(nYear, Calendar.MAY, 25)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;

    default: // Saturday
    date = (new GregorianCalendar(nYear, Calendar.MAY, 31)).getTime();

    System.out.println("Memorial day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date independenceDay(int nYear) {
    Date date;

    Calendar cal = new GregorianCalendar(nYear, Calendar.JULY, 4);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {
    case Calendar.SATURDAY:
    date = (new GregorianCalendar(nYear, Calendar.JULY, 3)).getTime();

    System.out.println("Independence day for " + nYear + " is: " + date);

    return date;

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.JULY, 5)).getTime();

    System.out.println("Independence day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    case Calendar.TUESDAY:
    case Calendar.WEDNESDAY:
    case Calendar.THURSDAY:
    case Calendar.FRIDAY:
    default:
    date = cal.getTime();

    System.out.println("Independence day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date laborDay(int nYear) {
    Date date;
    // The first Monday in September
    Calendar cal = new GregorianCalendar(nYear, Calendar.SEPTEMBER, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.TUESDAY:
    date = (new GregorianCalendar(nYear, Calendar.SEPTEMBER, 7)).getTime();

    System.out.println("Independence day for " + nYear + " is: " + date);

    return date;

    case Calendar.WEDNESDAY:
    date = (new GregorianCalendar(nYear, Calendar.SEPTEMBER, 6)).getTime();

    System.out.println("Labor day for " + nYear + " is: " + date);

    return date;

    case Calendar.THURSDAY:
    date = (new GregorianCalendar(nYear, Calendar.SEPTEMBER, 5)).getTime();

    System.out.println("Labor day for " + nYear + " is: " + date);

    return date;

    case Calendar.FRIDAY:
    date = (new GregorianCalendar(nYear, Calendar.SEPTEMBER, 4)).getTime();

    System.out.println("Labor day for " + nYear + " is: " + date);

    return date;

    case Calendar.SATURDAY:
    date = (new GregorianCalendar(nYear, Calendar.SEPTEMBER, 3)).getTime();

    System.out.println("Labor day for " + nYear + " is: " + date);

    return date;

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.SEPTEMBER, 2)).getTime();

    System.out.println("Labor day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    default:
    date = cal.getTime();

    System.out.println("Labor day for " + nYear + " is: " + date);

    return date;

    }
    }

    private static Date columbusDay(int nYear) {
    Date date;

    // The second Monday in October
    Calendar cal = new GregorianCalendar(nYear, Calendar.OCTOBER, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {
    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 9)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 8)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    case Calendar.TUESDAY:
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 14)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    case Calendar.WEDNESDAY:
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 13)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    case Calendar.THURSDAY:
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 12)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    case Calendar.FRIDAY:
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 11)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    default: // Saturday
    date = (new GregorianCalendar(nYear, Calendar.OCTOBER, 11)).getTime();

    System.out.println("Columbus day for " + nYear + " is: " + date);

    return date;

    }
    }

    private static Date veteransDay(int nYear) {
    Date date;

    Calendar cal = new GregorianCalendar(nYear, Calendar.NOVEMBER, 11);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SATURDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 10)).getTime();

    System.out.println("Veterans day for " + nYear + " is: " + date);

    return date;

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 12)).getTime();

    System.out.println("Veterans day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    case Calendar.TUESDAY:
    case Calendar.WEDNESDAY:
    case Calendar.THURSDAY:
    case Calendar.FRIDAY:
    default:
    date = cal.getTime();

    System.out.println("Veterans day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date thanksgiving(int nYear) {
    Date date;

    Calendar cal = new GregorianCalendar(nYear, Calendar.NOVEMBER, 1);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 26)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 25)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;

    case Calendar.TUESDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 24)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;

    case Calendar.WEDNESDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 23)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;

    case Calendar.THURSDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 22)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;

    case Calendar.FRIDAY:
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 28)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;

    default: // Saturday
    date = (new GregorianCalendar(nYear, Calendar.NOVEMBER, 27)).getTime();

    System.out.println("Thanksgiving day for " + nYear + " is: " + date);

    return date;
    }
    }

    private static Date christmasDay(int nYear) {
    Date date;

    Calendar cal = new GregorianCalendar(nYear, Calendar.DECEMBER, 25);

    switch (cal.get(Calendar.DAY_OF_WEEK)) {

    case Calendar.SATURDAY:
    date = (new GregorianCalendar(nYear, Calendar.DECEMBER, 24)).getTime();

    System.out.println("Christmas day for " + nYear + " is: " + date);

    return date;

    case Calendar.SUNDAY:
    date = (new GregorianCalendar(nYear, Calendar.DECEMBER, 26)).getTime();

    System.out.println("Christmas day for " + nYear + " is: " + date);

    return date;

    case Calendar.MONDAY:
    case Calendar.TUESDAY:
    case Calendar.WEDNESDAY:
    case Calendar.THURSDAY:
    case Calendar.FRIDAY:
    default:
    date = cal.getTime();

    System.out.println("Christmas day for " + nYear + " is: " + date);

    return date;
    }
    }

    public static boolean isTodayFederalHoliday(LocalDate localDate) {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");

    int nYear = localDate.getYear();

    return (formatter.format(newYearsDay(nYear)).equals(localDate.toString()) ||
    formatter.format(martinLutherKingDay(nYear)).equals(localDate.toString()) ||
    formatter.format(presidentsDay(nYear)).equals(localDate.toString()) ||
    formatter.format(memorialDay(nYear)).equals(localDate.toString()) ||
    formatter.format(independenceDay(nYear)).equals(localDate.toString()) ||
    formatter.format(laborDay(nYear)).equals(localDate.toString()) ||
    formatter.format(columbusDay(nYear)).equals(localDate.toString()) ||
    formatter.format(veteransDay(nYear)).equals(localDate.toString()) ||
    formatter.format(thanksgiving(nYear)).equals(localDate.toString()) ||
    formatter.format(christmasDay(nYear)).equals(localDate.toString()));
    }

    //The below with generate all the holidays for you from 2019 to 2035.
    public static void main(String[] args) {

    //System.out.println("Is it Holiday? " + isTodayFederalHoliday(LocalDate.now()));

    for (int nYear = 2019; nYear <= 2035; nYear++) {
    System.out.println("Federal Holidays for " + nYear + ":");

    newYearsDay(nYear);
    martinLutherKingDay(nYear);
    presidentsDay(nYear);
    memorialDay(nYear);
    independenceDay(nYear);
    laborDay(nYear);
    columbusDay(nYear);
    veteransDay(nYear);
    thanksgiving(nYear);
    christmasDay(nYear);
    System.out.println();
    }
    }
    }