import java.util.Calendar;
import java.util.GregorianCalendar;
public class Holiday {
public static void main(String[] argv)
{
System.out.println("Slovenian holiday?: " + Holiday.isHoliday());
}
public static boolean isHoliday() {
int thisYear = new GregorianCalendar().get(Calendar.YEAR);
Calendar now = new GregorianCalendar();
//now.set(thisYear , Calendar.OCTOBER,21);
Calendar jan1 = new GregorianCalendar();
jan1.set(thisYear, Calendar.JANUARY, 1);
Calendar jan2 = new GregorianCalendar();
jan2.set(thisYear, Calendar.JANUARY, 2);
Calendar esterSunday = Holiday.findHolyDay(thisYear);
Calendar esterMonday = Holiday.findHolyDay(thisYear);
//System.out.println(esterMonday.toString());
esterMonday.set(thisYear, esterMonday.get(Calendar.MONTH), esterMonday.get(Calendar.DAY_OF_MONTH) + 1);
//System.out.println(esterMonday.toString());
Calendar may1 = new GregorianCalendar();
may1.set(thisYear, Calendar.MAY, 1);
Calendar may2 = new GregorianCalendar();
may2.set(thisYear, Calendar.MAY, 2);
Calendar june25 = new GregorianCalendar();
june25.set(thisYear, Calendar.JUNE, 25);
Calendar august15 = new GregorianCalendar();
august15.set(thisYear, Calendar.AUGUST, 15);
Calendar oktober31 = new GregorianCalendar();
oktober31.set(thisYear, Calendar.OCTOBER, 31);
Calendar november1 = new GregorianCalendar();
november1.set(thisYear, Calendar.NOVEMBER, 1);
Calendar december25 = new GregorianCalendar();
december25.set(thisYear, Calendar.DECEMBER, 25);
Calendar december26 = new GregorianCalendar();
december26.set(thisYear, Calendar.DECEMBER, 26);
if( jan1.equals(now) || jan2.equals(now) || esterSunday.equals(now)
|| esterSunday.equals(now) || esterMonday.equals(now) || may1.equals(now) || may2.equals(now)
|| august15.equals(now) || oktober31.equals(now) || november1.equals(now) || december25.equals(now)
|| december26.equals(now))
{
//System.out.println("YUPI IT IS HOLIDAY!");
return true;
}
else
{
//System.out.println("---------------------------------------" + thisYear);
return false;
}
}
public boolean debugDate(int day, int month, int year) {
int thisYear = year;
Calendar now = new GregorianCalendar();
now.set(year , month-1 , day);
// System.out.println(now.getTimeInMillis());
Calendar jan1 = new GregorianCalendar();
jan1.set(thisYear, Calendar.JANUARY, 1);
Calendar jan2 = new GregorianCalendar();
jan2.set(thisYear, Calendar.JANUARY, 2);
Calendar esterSunday = Holiday.findHolyDay(thisYear);
Calendar esterMonday = Holiday.findHolyDay(thisYear);
//System.out.println(esterMonday.toString());
esterMonday.set(thisYear, esterMonday.get(Calendar.MONTH), esterMonday.get(Calendar.DAY_OF_MONTH) + 1);
//System.out.println(esterMonday.toString());
Calendar may1 = new GregorianCalendar();
may1.set(thisYear, Calendar.MAY, 1);
Calendar may2 = new GregorianCalendar();
may2.set(thisYear, Calendar.MAY, 2);
Calendar june25 = new GregorianCalendar();
june25.set(thisYear, Calendar.JUNE, 25);
Calendar august15 = new GregorianCalendar();
august15.set(thisYear, Calendar.AUGUST, 15);
Calendar oktober31 = new GregorianCalendar();
oktober31.set(thisYear, Calendar.OCTOBER, 31);
Calendar november1 = new GregorianCalendar();
november1.set(thisYear, Calendar.NOVEMBER, 1);
Calendar december25 = new GregorianCalendar();
december25.set(thisYear, Calendar.DECEMBER, 25);
Calendar december26 = new GregorianCalendar();
december26.set(thisYear, Calendar.DECEMBER, 26);
if( jan1.equals(now) || jan2.equals(now) || esterSunday.equals(now)
|| esterSunday.equals(now) || esterMonday.equals(now) || may1.equals(now) || may2.equals(now)
|| august15.equals(now) || oktober31.equals(now) || november1.equals(now) || december25.equals(now)
|| december26.equals(now))
{
//System.out.println("YUPI IT IS HOLIDAY!");
return true;
}
else
{
//System.out.println("---------------------------------------" + thisYear);
return false;
}
}
/*
* Compute the day of the year that Holiday falls on. Step names E1 E2 etc.,
* are direct references to Knuth, Vol 1, p 155. @exception
* IllegalArgumentexception If the year is before 1582 (since the algorithm
* only works on the Gregorian calendar).
*/
private static final Calendar findHolyDay(int year) {
if (year <= 1582) {
throw new IllegalArgumentException(
"Algorithm invalid before April 1583");
}
int golden, century, x, z, d, epact, n;
golden = (year % 19) + 1; /* E1: metonic cycle */
century = (year / 100) + 1; /* E2: e.g. 1984 was in 20th C */
x = (3 * century / 4) - 12; /* E3: leap year correction */
z = ((8 * century + 5) / 25) - 5; /* E3: sync with moon\'s orbit */
d = (5 * year / 4) - x - 10;
epact = (11 * golden + 20 + z - x) % 30; /* E5: epact */
if ((epact == 25 && golden > 11) || epact == 24)
epact++;
n = 44 - epact;
n += 30 * (n < 21 ? 1 : 0); /* E6: */
n += 7 - ((d + n) % 7);
if (n > 31)
{/* E7: */
Calendar ester = new GregorianCalendar();
ester.set(year, 4 - 1, n - 31);
return ester; /* April */
}
else
{/* E7: */
Calendar ester = new GregorianCalendar();
ester.set(year, 3 - 1, n);
return ester; /* March */
}
}
}