Bestimmung der Zeitpunkte von Ereignissen
ulrich
2023-03-18 66d68b6462bfd492db15535559c0c25b0f16eebc
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;
22 import de.uhilger.zeitrechnung.kalender.ISOKalender;
23 import java.util.ArrayList;
24 import java.util.List;
25
26 /**
27  * Wochentag vor oder nach einem Datum, zB Totensonntag (fuenter Sonntag 
28  * vor dem 24.12. oder Freitag vor dem Mittsommertag (24.6.) usw.
29  * 
30  * <code>
31  * {"name":"Totensonntag","typ":3,"p1":0,"p2":12,"p3":24,"p4":-5},
32  * </code>
33  * 
34  * <p>
35  * Ereignisdefinition<br>
36  * p1 Wochentag (0=Sonntag .. 6=Samstag)<br>
37  * p2 Monat (1=Januar .. 12=Dezember)<br>
38  * p3 Tag <br>
39  * p4 Wochentag vor (-) oder nach (+), z.B. -5 fuer fuenfter wie in 'fuenfter Freitag vor' <br>
40  * </p>
41  * @author Ulrich Hilger
42  */
43 public class TagDatumEreignis extends EreignisBasis {
44
45   /**
46    * Ein Objekt der Klasse TagDatumEreignis erstellen
47    */
48   public TagDatumEreignis() {
49     super();
50   }
51   
52   /**
53    * Den Typ des Ereignisses ermitteln
54    * 
55    * @return Ereignis.TYP_TAG_DATUM
56    */
57   @Override
58   public int getTyp() {
59     return Ereignis.TYP_TAG_DATUM;
60   }
61
62   /**
63    * Die Tage eines Jahres im gregorianischen Kalendersystem 
64    * ermitteln, an denen das Ereignis stattfindet.
65    * 
66    * @param isoJahr das Jahr im gregorianischen Kalender, 
67    * fuer das ermittelt werden soll, an welchen Tagen das Ereignis stattfindet
68    * @return die Liste aus Datum-Objekten, die die Tage im gregorianischen 
69    * Kalender bezeichnet, an denen das Ereignis stattfindet
70    */
71   @Override
72   public List<Datum> getZeitpunkte(long isoJahr) {
73     Definition def = getDefinition();
74     long monat = def.getp2();
75     long tag = def.getp3();
76     ISOKalender w = new ISOKalender();
77     long basisDatum = w.zuTagen(isoJahr, (int) monat, (int) tag);
78     long generischesDatum = w.nterTag((int) def.getp4(), (int) def.getp1(), basisDatum);
79     Datum d = w.vonTagen(generischesDatum);
80     //Datum d = w.getDatum();
81     ArrayList list = new ArrayList();
82     list.add(d);
83     return list;
84   } 
85 }