Bestimmung der Zeitpunkte von Ereignissen
ulrich
2023-03-19 8cf8493e4b918cece529fef978d50c8b9835d230
commit | author | age
66d68b 1 /*
U 2   Zeitrechnung - a class library to determine calendar events
3   Copyright (c) 1984-2023 Ulrich Hilger, http://uhilger.de
4
5   This program is free software: you can redistribute it and/or modify
6   it under the terms of the GNU Affero General Public License as published by
7   the Free Software Foundation, either version 3 of the License, or
8   (at your option) any later version.
9
10   This program is distributed in the hope that it will be useful,
11   but WITHOUT ANY WARRANTY; without even the implied warranty of
12   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13   GNU Affero General Public License for more details.
14
15   You should have received a copy of the GNU Affero General Public License
16   along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18 package de.uhilger.zeitrechnung.ereignis;
19
20 import de.uhilger.zeitrechnung.Datum;
21 import de.uhilger.zeitrechnung.Definition;
8cf849 22 import de.uhilger.zeitrechnung.kalender.BasisKalender;
66d68b 23 import de.uhilger.zeitrechnung.kalender.ISOKalender;
8cf849 24 import de.uhilger.zeitrechnung.kalender.JulianischerKalender;
U 25 import de.uhilger.zeitrechnung.kalender.Wandler;
66d68b 26 import java.util.ArrayList;
U 27 import java.util.List;
28
29 /**
30  * Wochentag vor oder nach einem Datum, zB Totensonntag (fuenter Sonntag 
31  * vor dem 24.12. oder Freitag vor dem Mittsommertag (24.6.) usw.
32  * 
33  * <code>
34  * {"name":"Totensonntag","typ":3,"p1":0,"p2":12,"p3":24,"p4":-5},
35  * </code>
36  * 
37  * <p>
38  * Ereignisdefinition<br>
39  * p1 Wochentag (0=Sonntag .. 6=Samstag)<br>
40  * p2 Monat (1=Januar .. 12=Dezember)<br>
41  * p3 Tag <br>
42  * p4 Wochentag vor (-) oder nach (+), z.B. -5 fuer fuenfter wie in 'fuenfter Freitag vor' <br>
8cf849 43  * p5 Kalendersystem 1 gregorianisch (Standardvorbelegung), 2 julianisch <br>
66d68b 44  * </p>
U 45  * @author Ulrich Hilger
46  */
47 public class TagDatumEreignis extends EreignisBasis {
48
49   /**
50    * Ein Objekt der Klasse TagDatumEreignis erstellen
51    */
52   public TagDatumEreignis() {
53     super();
54   }
55   
56   /**
57    * Den Typ des Ereignisses ermitteln
58    * 
59    * @return Ereignis.TYP_TAG_DATUM
60    */
61   @Override
62   public int getTyp() {
63     return Ereignis.TYP_TAG_DATUM;
64   }
65
66   /**
67    * Die Tage eines Jahres im gregorianischen Kalendersystem 
68    * ermitteln, an denen das Ereignis stattfindet.
69    * 
70    * @param isoJahr das Jahr im gregorianischen Kalender, 
71    * fuer das ermittelt werden soll, an welchen Tagen das Ereignis stattfindet
72    * @return die Liste aus Datum-Objekten, die die Tage im gregorianischen 
73    * Kalender bezeichnet, an denen das Ereignis stattfindet
74    */
75   @Override
76   public List<Datum> getZeitpunkte(long isoJahr) {
77     Definition def = getDefinition();
78     long monat = def.getp2();
79     long tag = def.getp3();
8cf849 80     long kalender = def.getp5();
U 81     Wandler w;
82     if(1 == kalender) {
83       w = new ISOKalender();
84     } else {
85       w = new JulianischerKalender();
86     }
66d68b 87     long basisDatum = w.zuTagen(isoJahr, (int) monat, (int) tag);
8cf849 88     long generischesDatum = ((BasisKalender) w).nterTag((int) def.getp4(), (int) def.getp1(), basisDatum);
66d68b 89     Datum d = w.vonTagen(generischesDatum);
U 90     //Datum d = w.getDatum();
91     ArrayList list = new ArrayList();
92     list.add(d);
93     return list;
94   } 
95 }