Jak obliczyć datę Wielkanocy i Bożego Ciała?
Wielkanoc jest świętem ruchomym. Datę Wielkiej Nocy ustalono na pierwszą niedzielę po pierwszej pełni księżyca po dniu równonocy wiosennej. Ta data może przypadać najwcześniej 22 marca, a najpóźniej 25 kwietnia. Boże Ciało przypada 60 dni po Wielkanocy.
Zastosowany algorytm oblicza datę Wielkanocy dla potrzeb naszego Kościoła i nie jest ścisłym algorytmem astronomicznym.
Algorytm oblicza datę Wielkanocy od daty reformy kalendarza (1582 r.) do roku 2499.
Klasy
Klasa Wielkanoc
package wielkanoc; class Wielkanoc { private int dzienWielk; private int miesiacWielk; private int rok; private int dzienBoze = 0; private int miesiacBoze = 0; public Wielkanoc(int rok) { this.rok = rok; int wskA = 0; int wskB = 0; if (rok <= 1582) { wskA = 15; wskB = 6; } else if ((rok >= 1583) && (rok <= 1699)) { wskA = 22; wskB = 2; } else if ((rok >= 1700) && (rok <= 1799)) { wskA = 23; wskB = 3; } else if ((rok >= 1800) && (rok <= 1899)) { wskA = 23; wskB = 4; } else if ((rok >= 1900) && (rok <= 2099)) { wskA = 24; wskB = 5; } else if ((rok >= 2100) && (rok <= 2199)) { wskA = 24; wskB = 6; } else if ((rok >= 2200) && (rok <= 2299)) { wskA = 25; wskB = 0; } else if ((rok >= 2300) && (rok <= 2399)) { wskA = 26; wskB = 1; } else if ((rok >= 2300) && (rok <= 2499)) { wskA = 25; wskB = 1; } int a = rok % 19; int b = rok % 4; int c = rok % 7; int d = (a * 19 + wskA) % 30; int e = (2 * b + 4 * c + 6 * d + wskB) % 7; int liczbaDni = 22 + d + e; if ((d == 29) && (e == 6)) { dzienWielk = 19; miesiacWielk = 4; } else if ((d == 28) & (e == 6)) { dzienWielk = 18; miesiacWielk = 4; } else { if (liczbaDni <= 31) { dzienWielk = liczbaDni; miesiacWielk = 3; } else { dzienWielk = liczbaDni - 31; miesiacWielk = 4; } } obliczBozeCialo(); } private void obliczBozeCialo() { int temp; if (miesiacWielk == 3) { temp = 60 - (31 - dzienWielk) - 30; } else { temp = 60 - (30 - dzienWielk); } if (temp <= 31) { dzienBoze = temp; miesiacBoze = 5; } else { dzienBoze = temp - 31; miesiacBoze = 6; } } public int getRok() { return rok; } public void setRok(int rok) { this.rok = rok; } public int getDzienWielk() { return dzienWielk; } public void setDzienWielk(int dzienWielk) { this.dzienWielk = dzienWielk; } public int getMiesiacWielk() { return miesiacWielk; } public void setMiesiacWielk(int miesiacWielk) { this.miesiacWielk = miesiacWielk; } public int getDzienBoze() { return dzienBoze; } public void setDzienBoze(int dzienBoze) { this.dzienBoze = dzienBoze; } public int getMiesiacBoze() { return miesiacBoze; } public void setMiesiacBoze(int miesiacBoze) { this.miesiacBoze = miesiacBoze; } @Override public String toString() { return "Data Wielkanocy: " + rok + "-" + miesiacWielk + "-" + dzienWielk + "\n" + "Data Bożego Ciała: " + rok + "-" + miesiacBoze + "-" + dzienBoze; } }
Klasa Main
package wielkanoc; public class Main { public static void main(String[] args) { Wielkanoc w1 = new Wielkanoc(2021); System.out.println(w1); Wielkanoc w2 = new Wielkanoc(2022); System.out.println(w2); } }
Wynik
Data Wielkanocy: 2021-4-4 Data Bożego Ciała: 2021-6-3 Data Wielkanocy: 2022-4-17 Data Bożego Ciała: 2022-6-16