Mega Code Archive

 
Categories / Java / Data Type
 

Calculate Holidays

//** Copyright Statement *************************************************** //The Salmon Open Framework for Internet Applications (SOFIA) // Copyright (C) 1999 - 2002, Salmon LLC // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License version 2 // as published by the Free Software Foundation; //  // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the // GNU General Public License for more details. //  // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA. //  // For more information please visit http://www.salmonllc.com //** End Copyright Statement *************************************************** // // //    Author: Gregory N. Mirsky //    Updated: John D. Mitchell //    Version 1.02 //    import java.util.Calendar; public class Holidays     { //********************************* // Miscellaneous other holidays are left as an exercise for the reader. // // public static Date QuebecCivicHoliday (int nYear) // { //  // 03 January YYYY // } // // public static Date AshWednesday (int nYear) // { //  // 42 days before easter... // } // // public static Date PalmSunday (int nYear) // { //  // Sunday before Easter Sunday... // } // // public static Date MaundayThursday (int nYear) // { //  // Thursday before Easter... // } // //  public static Date RoshHashanah(int nYear) // { //  Source: William H. Jefferys, Department of Astronomy, University of //  Texas Austin, TX 78712  // //         http://quasar.as.utexas.edu // //  First, calculate the Golden Number G. This is fundamental to the //  calculation of both the date of Easter and the Date of Rosh Hashanah.  //  It is intimately connected with the Metonic Cycle. For any year Y, the //  Golden Number is defined as  // //  G = Remainder(Y|19) + 1. Don't forget to add the 1!!! // //  The following rules are also due to John Horton Conway, of Princeton //  University. In the Gregorian year Y of the Common Era, Rosh Hashanah //  normally falls on September N, where // //  N + fraction = {[Y/100] - [Y/400] - 2} + //  765433/492480*Remainder(12G|19) + Remainder(Y|4)/4 - (313Y+89081)/98496 // //  Here, G is the Golden Number, and * means multiply. However, if certain //  conditions are satisfied, Rosh Hashanah is postponed by one or even two //  days, as follows:  // //      ***Postponement rules*** // //  1.If the day calculated above is a Sunday, Wednesday, or Friday, Rosh //  Hashanah falls on the next day (Monday, Thursday or Saturday, //  respectively). // //  2.If the calculated day is a Monday, and if the fraction is greater //  than or equal to 23269/25920, and if Remainder(12G|19) is greater than //  11, Rosh Hashanah falls on the next day, a Tuesday. // //  3.If it is a Tuesday, and if the fraction is greater than or equal to //  1367/2160, and if Remainder(12G|19) is greater than 6, Rosh Hashanah //  falls two days later, on Thursday (NOT WEDNESDAY!!). // } // //  public static Date Passover(int nYear) // { //  Source: William H. Jefferys, Department of Astronomy, University of //  Texas Austin, TX 78712 // //         http://quasar.as.utexas.edu // //  Once you have determined the date of Rosh Hashanah, it is easy to //  calculate the date of Passover in the same (Gregorian or Julian) //  year. Let M = the number of days from September 6 to Rosh Hashanah. //  In the example for 1996, M=September 14-September 6 = 8 days. // //  Count M days from March 27. That is the date of Passover. It actually //  begins at sundown on the previous evening. In the example for 1996, 8 //  days after March 27 is April 4 (there are 31 days in March), so //  Passover begins at sundown on April 3. // } // // public static Date DominionDay (int nYear) // { //  // 01 July YYYY // } // // public static Date BoxingDay (int nYear) //  { //  // Day after Christmas, December 26th... //  } // //*********************************************          public static java.util.Calendar AbrahamLincolnsBirthday (int nYear){   int nMonth = 1; // February   // February 12th   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 12);    return cal; } public static java.util.Calendar ChristmasDay (int nYear){   int nMonth = 11; // Decmeber   // December 25th   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 25);   return cal; }     public static java.util.Calendar ChristmasDayObserved (int nYear)   {   int nX;   int nMonth = 11; // December   java.util.Calendar cal;   cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 25);   nX = cal.get(Calendar.DAY_OF_WEEK);   switch(nX)       {       case 0 : {// Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 26);       return cal;       }       case 1 : // Monday       case 2 : // Tuesday       case 3 : // Wednesday       case 4 : // Thrusday       case 5 :{ // Friday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 25);       return cal;       }       default :{     // Saturday       cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 24);       return cal;       }     } }     public static java.util.Calendar ColumbusDayObserved (int nYear)   {   // Second Monday in October   int nX;   int nMonth = 9; // October    java.util.Calendar cal;   cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);   nX = cal.get(Calendar.DAY_OF_WEEK);   switch(nX)       {       case 0 : {// Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 9);       return cal;       }     case 1 : {// Monday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 15);       return cal;       }       case 2 : // Tuesday       {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 14);       return cal;       }       case 3 : // Wednesday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 13);       return cal;       }       case 4 : // Thrusday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 12);       return cal;       }       case 5 : // Friday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 11);       return cal;       }       default : // Saturday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 10);       return cal;       }       }   }     public static java.util.Calendar EasterMonday (int nYear)   {   int nEasterMonth = 0;   int nEasterDay   = 0;   int nMonthMarch  = 2; // March   int nMonthApril  = 3; // April   java.util.Calendar cEasterSunday = EasterSunday(nYear);   nEasterMonth = cEasterSunday.get(Calendar.MONTH);   nEasterDay = cEasterSunday.get(Calendar.DAY_OF_MONTH);   if (nEasterMonth == nMonthMarch || nEasterDay == 31){     java.util.Calendar cal = java.util.Calendar.getInstance();     cal.set(nYear, nMonthApril, 1);     return cal;   }else{     java.util.Calendar cal = java.util.Calendar.getInstance();     cal.set(nYear, nEasterMonth, ++nEasterDay);     return cal;   } }     public static java.util.Calendar EasterSunday(int nYear)   {  /*  Calculate Easter Sunday   Written by Gregory N. Mirsky   Source: 2nd Edition by Peter Duffett-Smith. It was originally from   Butcher's Ecclesiastical Calendar, published in 1876. This   algorithm has also been published in the 1922 book General   Astronomy by Spencer Jones; in The Journal of the British   Astronomical Association (Vol.88, page 91, December 1977); and in   Astronomical Algorithms (1991) by Jean Meeus.   This algorithm holds for any year in the Gregorian Calendar, which   (of course) means years including and after 1583.         a=year%19         b=year/100         c=year%100         d=b/4         e=b%4         f=(b+8)/25         g=(b-f+1)/3         h=(19*a+b-d-g+15)%30         i=c/4         k=c%4         l=(32+2*e+2*i-h-k)%7         m=(a+11*h+22*l)/451         Easter Month =(h+l-7*m+114)/31  [3=March, 4=April]         p=(h+l-7*m+114)%31         Easter Date=p+1     (date in Easter Month)   Note: Integer truncation is already factored into the   calculations. Using higher percision variables will cause   inaccurate calculations.  */   int nA      = 0;   int nB      = 0;   int nC      = 0;     int nD      = 0;   int nE      = 0;   int nF      = 0;   int nG      = 0;   int nH      = 0;   int nI      = 0;   int nK      = 0;   int nL      = 0;   int nM      = 0;   int nP      = 0;   int nEasterMonth  = 0;   int nEasterDay    = 0;   // Calculate Easter   if (nYear < 1900)        {        // if year is in java format put it into standard       // format for the calculation       nYear += 1900;        }   nA = nYear % 19;   nB = nYear / 100;   nC = nYear % 100;   nD = nB / 4;   nE = nB % 4;   nF = (nB + 8) / 25;   nG = (nB - nF + 1) / 3;   nH = (19 * nA + nB - nD - nG + 15) % 30;   nI = nC / 4;   nK = nC % 4;   nL = (32 + 2 * nE + 2 * nI - nH - nK) % 7;   nM=  (nA + 11 * nH + 22 * nL) / 451;   //  [3=March, 4=April]   nEasterMonth = (nH + nL - 7 * nM + 114) / 31;   --nEasterMonth;   nP = (nH + nL - 7 * nM + 114) % 31;   // Date in Easter Month.   nEasterDay = nP + 1;   // Uncorrect for our earlier correction.   nYear -= 1900;   // Populate the date object...   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nEasterMonth, nEasterDay);   return cal;   }     public static java.util.Calendar GoodFridayObserved(int nYear)   {   // Get Easter Sunday and subtract two days   int nEasterMonth  = 0;   int nEasterDay    = 0;   int nGoodFridayMonth  = 0;   int nGoodFridayDay  = 0;   java.util.Calendar cEasterSunday;        cEasterSunday = EasterSunday(nYear);   nEasterMonth = cEasterSunday.get(Calendar.MONTH);   nEasterDay = cEasterSunday.get(Calendar.DAY_OF_MONTH);   if (nEasterDay <= 3 && nEasterMonth == 3){ // Check if <= April 3rd              switch(nEasterDay){     case 3 :          nGoodFridayMonth = nEasterMonth - 1;         nGoodFridayDay   = nEasterDay - 2;         break;     case 2 :         nGoodFridayMonth = nEasterMonth - 1;         nGoodFridayDay   = 31;         break;     case 1 :         nGoodFridayMonth = nEasterMonth - 1;         nGoodFridayDay   = 31;         break;     default:         nGoodFridayMonth = nEasterMonth;         nGoodFridayDay   = nEasterDay - 2;     }   }else{       nGoodFridayMonth = nEasterMonth;       nGoodFridayDay   = nEasterDay - 2;   }     java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nGoodFridayMonth, nGoodFridayDay);   return cal; } public static java.util.Calendar Halloween (int nYear){   int nMonth = 9;   // October 31st   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 31);   return cal; }     public static java.util.Calendar IndependenceDay (int nYear)   {   int nMonth = 6; // July   // July 4th   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 4);   return cal; } public static java.util.Calendar IndependenceDayObserved (int nYear){   int nX;   int nMonth = 6; // July      java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 4);          nX = cal.get(Calendar.DAY_OF_WEEK);   switch(nX){       case 0 : // Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 5);       return cal;     case 1 : // Monday       case 2 : // Tuesday       case 3 : // Wednesday       case 4 : // Thrusday       case 5 : // Friday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 4);       return cal;       default :     // Saturday       cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 3);       return cal;     } } public static java.util.Calendar LaborDayObserved (int nYear){   // The first Monday in September   int nX;   int nMonth = 8; // September   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, 9, 1);          nX = cal.get(Calendar.DAY_OF_WEEK);        switch(nX){       case 0 : // Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 2);       return cal;     case 1 : // Monday       cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 7);       return cal;       case 2 : // Tuesday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 6);       return cal;       case 3 : // Wednesday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 5);       return cal;       case 4 : // Thrusday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 4);       return cal;       case 5 : // Friday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 3);       return cal;       default : // Saturday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 2);       return cal;     } } public java.util.Calendar MartinLutherKingObserved (int nYear){   // Third Monday in January   int nX;   int nMonth = 0; // January   java.util.Calendar cal;   cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);   nX = cal.get(Calendar.DAY_OF_WEEK);      switch(nX) {     case 0 : {// Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 16);       return cal;       }     case 1 : {// Monday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 15);       return cal;       }       case 2 : // Tuesday       {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 21);       return cal;       }       case 3 : // Wednesday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 20);       return cal;       }       case 4 : // Thrusday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 19);       return cal;       }       case 5 : // Friday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 18);       return cal;       }       default : // Saturday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 17);       return cal;       }            } } public static java.util.Calendar MemorialDayObserved (int nYear){   // Last Monday in May   int nX;   int nMonth = 4; //May   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 31);          nX = cal.get(Calendar.DAY_OF_WEEK);         switch(nX){      case 0 : // Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 25);       return cal;     case 1 : // Monday       cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 31);       return cal;       case 2 : // Tuesday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 30);       return cal;       case 3 : // Wednesday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 29);       return cal;       case 4 : // Thrusday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 28);       return cal;       case 5 : // Friday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 27);       return cal;       default : // Saturday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 26);       return cal;          } } public static java.util.Calendar  NewYearsDay (int nYear){   // January 1st   int nMonth = 0; // January   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);      return cal; } public static java.util.Calendar NewYearsDayObserved (int nYear){   int nX;   int nMonth = 0;     // January   int nMonthDecember = 11;  // December      java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);          nX = cal.get(Calendar.DAY_OF_WEEK);        if (nYear > 1900)       nYear -= 1900;   switch(nX){       case 0 : // Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 2);       return cal;       case 1 : // Monday       case 2 : // Tuesday       case 3 : // Wednesday       case 4 : // Thrusday       case 5 : // Friday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 1);       return cal;       default :     // Saturday, then observe on friday of previous year       cal = java.util.Calendar.getInstance();       cal.set(--nYear, nMonthDecember, 31);       return cal;     } } public static java.util.Calendar PresidentsDayObserved (int nYear){   // Third Monday in February   int nX;   int nMonth = 1; // February   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);          nX = cal.get(Calendar.DAY_OF_WEEK);      switch(nX){      case 0 : {// Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 16);       return cal;       }     case 1 : {// Monday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 15);       return cal;       }       case 2 : // Tuesday       {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 21);       return cal;       }       case 3 : // Wednesday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 20);       return cal;       }       case 4 : // Thrusday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 19);       return cal;       }       case 5 : // Friday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 18);       return cal;       }       default : // Saturday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 17);       return cal;       }     } } public static java.util.Calendar ThanksgivingObserved(int nYear){   int nX;   int nMonth = 10; // November   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);          nX = cal.get(Calendar.DAY_OF_WEEK);   switch(nX){          case 0 : {// Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 26);       return cal;       }     case 1 : {// Monday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 25);       return cal;       }       case 2 : // Tuesday       {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 24);       return cal;       }       case 3 : // Wednesday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 23);       return cal;       }       case 4 : // Thrusday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 22);       return cal;       }       case 5 : // Friday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 28);       return cal;       }       default : // Saturday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 27);       return cal;       }     } } public static java.util.Calendar USElectionDay (int nYear){   // First Tuesday in November   int nX;    int nMonth = 10; // November   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 1);   nX = cal.get(Calendar.DAY_OF_WEEK);   switch(nX){       case 0 : {// Sunday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 3);       return cal;       }     case 1 : {// Monday         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 2);       return cal;       }       case 2 : // Tuesday       {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 1);       return cal;       }       case 3 : // Wednesday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 7);       return cal;       }       case 4 : // Thrusday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 6);       return cal;       }       case 5 : // Friday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 5);       return cal;       }       default : // Saturday     {         cal = java.util.Calendar.getInstance();       cal.set(nYear, nMonth, 4);       return cal;       }     } } public static java.util.Calendar ValentinesDay (int nYear){   int nMonth = 1; // February   // February 14th   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 14);   return cal; } public static java.util.Calendar VeteransDayObserved (int nYear){   //November 11th   int nMonth = 10; // November   java.util.Calendar cal = java.util.Calendar.getInstance();   cal.set(nYear, nMonth, 11);   return cal; } public static String getClassInfo()   {   return ("Name: Holidays\r\n" +     "Author: Gregory N. Mirsky\r\n" +     "Updated: John D. Mitchell\r\n" +     "Version 1.02\r\n" +     "Copyright 1997, All rights reserved.");   } }