From 5a9f2f4d4268c886576081970bc6b8f5dc311832 Mon Sep 17 00:00:00 2001 From: ulrich Date: Mon, 17 Apr 2023 12:48:18 +0000 Subject: [PATCH] Orthodoxes Ostern berichtigt --- src/de/uhilger/zeitrechnung/ereignis/OsterEreignis.java | 14 ++++-- /dev/null | 55 --------------------------- src/de/uhilger/zeitrechnung/kalender/JulianischerKalender.java | 10 +++++ src/de/uhilger/zeitrechnung/kalender/ISOKalender.java | 17 ++++++++ 4 files changed, 36 insertions(+), 60 deletions(-) diff --git a/src/de/uhilger/zeitrechnung/ereignis/OsterEreignis.java b/src/de/uhilger/zeitrechnung/ereignis/OsterEreignis.java index f74202e..9923be1 100644 --- a/src/de/uhilger/zeitrechnung/ereignis/OsterEreignis.java +++ b/src/de/uhilger/zeitrechnung/ereignis/OsterEreignis.java @@ -17,9 +17,11 @@ */ package de.uhilger.zeitrechnung.ereignis; -import de.uhilger.zeitrechnung.kalender.ChristlicherKalender; import de.uhilger.zeitrechnung.Datum; import de.uhilger.zeitrechnung.Definition; +import de.uhilger.zeitrechnung.kalender.ISOKalender; +import de.uhilger.zeitrechnung.kalender.JulianischerKalender; +import de.uhilger.zeitrechnung.kalender.Wandler; import java.util.ArrayList; import java.util.List; @@ -103,7 +105,6 @@ */ @Override public List<Datum> getZeitpunkte(long isoJahr) { - ChristlicherKalender ck = new ChristlicherKalender(); Definition def = getDefinition(); if (ostern > Long.MIN_VALUE && jahr == isoJahr && osterArt == def.getp2()) { // Ostern wurde fuer das fragliche Jahr schon bestimmt @@ -111,12 +112,15 @@ jahr = isoJahr; osterArt = def.getp2(); if (osterArt == WESTLICH) { - ostern = ck.ostern(isoJahr); + Wandler k = new ISOKalender(); + ostern = ((ISOKalender) k).ostern(isoJahr); } else { - ostern = ck.orthodoxesOstern(isoJahr); + Wandler k = new JulianischerKalender(); + ostern = ((JulianischerKalender) k).orthodoxesOstern(isoJahr); } } - Datum d = ck.vonTagen(ostern + getDefinition().getp1()); + ISOKalender iso = new ISOKalender(); + Datum d = iso.vonTagen(ostern + getDefinition().getp1()); ArrayList list = new ArrayList(); list.add(d); return list; diff --git a/src/de/uhilger/zeitrechnung/kalender/ChristlicherKalender.java b/src/de/uhilger/zeitrechnung/kalender/ChristlicherKalender.java deleted file mode 100644 index e9e1aaa..0000000 --- a/src/de/uhilger/zeitrechnung/kalender/ChristlicherKalender.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - Zeitrechnung - a class library to determine calendar events - Copyright (c) 1984-2023 Ulrich Hilger, http://uhilger.de - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - 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 Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - */ -package de.uhilger.zeitrechnung.kalender; - -import de.uhilger.zeitrechnung.Definition; - -/** - * Bestimmung des Ostersonntages als generisches Datum nach christlicher - * sowie christlich orthodoxer Verwendung. - * - * @author Ulrich Hilger - */ -public class ChristlicherKalender extends ISOKalender { - - public long ostern(long gregorianischesJahr) { - long jahrhundert = 1 + ganzzahlQuotient(gregorianischesJahr, 100); - long veraenderlicheEpakte = modulo(14 - + 11 * modulo(gregorianischesJahr, 19) - - ganzzahlQuotient(3 * jahrhundert, 4) - + ganzzahlQuotient(5 + 8 * jahrhundert, 25), - 30); - long berichtigteEpakte = veraenderlicheEpakte == 0 || - (veraenderlicheEpakte == 1 && 10 < modulo(gregorianischesJahr, 19)) - ? veraenderlicheEpakte + 1 - : veraenderlicheEpakte; - long vollmondOstern = zuTagen(gregorianischesJahr, Definition.APRIL, 19) - - berichtigteEpakte; - return tagNach(vollmondOstern, Definition.SONNTAG); - } - - public long orthodoxesOstern(long gregorianischesJahr) { - long vollmondOstern = 354 * gregorianischesJahr - + 30 * ganzzahlQuotient((7 * gregorianischesJahr) - 8, 19) - + ganzzahlQuotient(gregorianischesJahr, 4) - - ganzzahlQuotient(gregorianischesJahr, 19) - - 272; - return tagNach(vollmondOstern, Definition.SONNTAG); - } - -} diff --git a/src/de/uhilger/zeitrechnung/kalender/ISOKalender.java b/src/de/uhilger/zeitrechnung/kalender/ISOKalender.java index 13a73c2..5983a85 100644 --- a/src/de/uhilger/zeitrechnung/kalender/ISOKalender.java +++ b/src/de/uhilger/zeitrechnung/kalender/ISOKalender.java @@ -137,4 +137,21 @@ return 31; } } + + public long ostern(long gregorianischesJahr) { + long jahrhundert = 1 + ganzzahlQuotient(gregorianischesJahr, 100); + long veraenderlicheEpakte = modulo(14 + + 11 * modulo(gregorianischesJahr, 19) + - ganzzahlQuotient(3 * jahrhundert, 4) + + ganzzahlQuotient(5 + 8 * jahrhundert, 25), + 30); + long berichtigteEpakte = veraenderlicheEpakte == 0 || + (veraenderlicheEpakte == 1 && 10 < modulo(gregorianischesJahr, 19)) + ? veraenderlicheEpakte + 1 + : veraenderlicheEpakte; + long vollmondOstern = zuTagen(gregorianischesJahr, Definition.APRIL, 19) - + berichtigteEpakte; + return tagNach(vollmondOstern, Definition.SONNTAG); + } + } diff --git a/src/de/uhilger/zeitrechnung/kalender/JulianischerKalender.java b/src/de/uhilger/zeitrechnung/kalender/JulianischerKalender.java index fc91150..d218062 100644 --- a/src/de/uhilger/zeitrechnung/kalender/JulianischerKalender.java +++ b/src/de/uhilger/zeitrechnung/kalender/JulianischerKalender.java @@ -19,6 +19,8 @@ import de.uhilger.zeitrechnung.Datum; import de.uhilger.zeitrechnung.Definition; +import static de.uhilger.zeitrechnung.Definition.APRIL; +import static de.uhilger.zeitrechnung.Definition.SONNTAG; /** * Die Klasse JulianischerKalender dient zur Umwandlung von generischem @@ -93,6 +95,14 @@ return new Datum(jahr, monat, tag); } + public long orthodoxesOstern(long gJahr) { + long berichtigteEpakte = modulo(14 + 11 * modulo(gJahr, 19), 30); + long jJahr = gJahr > 0 ? gJahr : gJahr - 1; + long pMond = zuTagen(jJahr, APRIL, 19) - berichtigteEpakte; + return tagNach(pMond, SONNTAG); + } + + /* ------------ Besonderheiten des Julianischen Kalenders ---------- */ /** -- Gitblit v1.9.3