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