Calculates when various holidays occur in any given year BC or AD. Designed to be cannibalised to include the calculation routines in your own programs. You might use it to prepare paper calenders well in advance or electronic calendars. You might also use the logic in computer programs that compute payrolls, bus schedules, or club meetings. You might use it in writing novels or researching historical events. It can also be used as an Applet or a standalone application. It currently calculates 68 "holidays" including the following: New Years Day Congress Start Day Martin Luther King Day Inauguration Day Robbie Burns Day Australia Day Groundhog Day BC Family Day Mardi Gras Ash Wednesday Darwin Day Lincoln's Birthday Valentines Day Presidents Day Alberta Family Day Washington's Birthday Commonwealth Day Daylight Savings Day St Patrick's day Vernal Equinox Palm Sunday Good Friday Earth Hour April Fools Day Earth Day Easter Sunday Easter Monday ANZAC Day Cinco de Mayo Europe Day Mothers Day Armed Forces Day Victoria Day Memorial Day Change Your Password Day Australia Queen's Birthday Fathers Day Summer Solstice Aboriginal Day St Jean-Baptiste Day Canada Day Independence Day Utah Pioneer Day Parents' Day Canada Civic Day Canadian Labour Day American Labor Day Grandparents Daay Autumnal Equinox Canadian Thanksgiving Columbus Day Creationism Day Halloween Daylight Savings End General Election Day Remembrance Day Veterans Day American Thanksgiving Black Friday St. Andrews Day World AIDS Day Human Rights Day Winter Solstice Christmas Eve Christmas Christmas in the USA Boxing Day New Years Eve If a holiday was not celebrated in a given year, it will not show. Includes complete Java source code to calculate when the holiday occurs in a given year, when it was first celebrated, when first proclaimed, the rule for how it is calculated in words and an authority to go to for more information. Also calculates the nearest weekday to any given holiday, when you actually get the day off. This is what I refer to by the term "shifted". Boxing day has special shift handling. In the source are methods that can also be used to calculate how many business days were between given dates. It is quite easy to specify which days you want considered as holidays using methods like addHoliday where you specify the date or the name of the Holiday, addAmericanFederalHolidays and addWeekDaysAsHolidays. The main holiday still missing is Chinese New Year, the second new moon after Winter solstice. Since it is an astronomical moment, the civil calendar day it occurs on depends on time zone. There is an additiontal package of German holidays designed to work in the Holidays framework available from http://www.applicate.de/freesoftware/holiday/ One typical use embedding in your own program: public class DemoGermanHolidayUtils { public static void main(String[] args) { // 1. Enable calculation from 1995 to 2010 IsHoliday holiday = new IsHoliday(1995, 2010); // 2. Mark weekends as holidays holiday.addWeekendsAsHolidays(); // 3. Add German federal holidays GermanHolidayUtils.addGermanFederalHolidays(holiday); System.out.print("Is May 1st 2002 a holiday: "); System.out.println(holiday.isHoliday( new BigDate(2002, 5, 1))); } } To install, Extract the zip download with WinZip, available from http://www.winzip.com (or similar unzip utility) into any directory you please, often C:\ -- ticking off the "user folder names" option. To run as an application, type: java.exe -jar C:\com\mindprod\holidays\holidays.jar adjusting as necessary to account for where the jar file is. Why the turkey icon? It represents the holiday feasts of Thanksgiving and Christmas. You may use the code freely in your own programs. Exporting Holidays to CSV ************************* You can use the ExportHolidaysToCSV program to calculate and export the holidays for any given year in CSV format. You can the import them into programs or databases written in other languages. Use it like this: java.exe -jar exportholidaystocsv.jar 2050 verbose to get the authority and rules includes. These generate multiple line fields, incompatible with some simple-minded CSV programs. Or java.exe -jar exportholidaystocsv.jar 2050 to get just the holiday name, yyyy-mm-dd when observed in 2050, year first observed and year first proclaimed. If you leave of the year, the current year is presumed. The results appear in a file called: holidaysInYear2050.csv in the current directory. The file is in UTF-8 encoding. View it with NotePad, Jedit or other modern UTF-8 text editor. You can convert it with CSVEntify to make visbible the awkward characters with HTML entities,