59 lines
2 KiB
Java
59 lines
2 KiB
Java
import java.text.DateFormatSymbols;
|
|
import java.util.*;
|
|
|
|
public class EasterRelatedHolidays {
|
|
|
|
final static Map<String, Integer> holidayOffsets;
|
|
|
|
static {
|
|
holidayOffsets = new LinkedHashMap<>();
|
|
holidayOffsets.put("Easter", 0);
|
|
holidayOffsets.put("Ascension", 39);
|
|
holidayOffsets.put("Pentecost", 10);
|
|
holidayOffsets.put("Trinity", 7);
|
|
holidayOffsets.put("Corpus", 4);
|
|
}
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println("Christian holidays, related to Easter,"
|
|
+ " for each centennial from 400 to 2100 CE:");
|
|
|
|
for (int y = 400; y <= 2100; y += 100)
|
|
printEasterRelatedHolidays(y);
|
|
|
|
System.out.println("\nChristian holidays, related to Easter,"
|
|
+ " for years from 2010 to 2020 CE:");
|
|
for (int y = 2010; y < 2021; y++)
|
|
printEasterRelatedHolidays(y);
|
|
}
|
|
|
|
static void printEasterRelatedHolidays(int year) {
|
|
final int a = year % 19;
|
|
final int b = year / 100;
|
|
final int c = year % 100;
|
|
final int d = b / 4;
|
|
final int e = b % 4;
|
|
final int f = (b + 8) / 25;
|
|
final int g = (b - f + 1) / 3;
|
|
final int h = (19 * a + b - d - g + 15) % 30;
|
|
final int i = c / 4;
|
|
final int k = c % 4;
|
|
final int l = (32 + 2 * e + 2 * i - h - k) % 7;
|
|
final int m = (a + 11 * h + 22 * l) / 451;
|
|
final int n = h + l - 7 * m + 114;
|
|
final int month = n / 31 - 1;
|
|
final int day = (n % 31) + 1;
|
|
|
|
Calendar date = new GregorianCalendar(year, month, day);
|
|
String[] months = new DateFormatSymbols(Locale.US).getShortMonths();
|
|
|
|
System.out.printf("%4d ", year);
|
|
for (String hd : holidayOffsets.keySet()) {
|
|
date.add(Calendar.DATE, holidayOffsets.get(hd));
|
|
System.out.printf("%s: %2d %s ", hd,
|
|
date.get(Calendar.DAY_OF_MONTH),
|
|
months[date.get(Calendar.MONTH)]);
|
|
}
|
|
System.out.println();
|
|
}
|
|
}
|