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