Bestimmung der Zeitpunkte von Ereignissen
ulrich
2023-03-23 d20d989f5495492f1258c8313db7c19b429111a3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package de.uhilger.zeitrechnung.ereignis;
 
import de.uhilger.zeitrechnung.Datum;
import de.uhilger.zeitrechnung.Definition;
import de.uhilger.zeitrechnung.kalender.ISOKalender;
import de.uhilger.zeitrechnung.kalender.JulianischerKalender;
import java.util.ArrayList;
import java.util.List;
 
/**
 * Bestimmung der Zeitpunkte von Ereignissen im julianischen Kalendersystem
 *
 * <p>
 * Die Ereignis-Definition lautet:<br>
 * JulianischesEreignis.getDefinition.setp1(Monat des julianischen
 * Kalenders);<br>
 * JulianischesEreignis.getDefinition.setp2(Tag im Monat des julianischen
 * Kalenders);<br>
 *
 * @author Ulrich Hilger
 */
public class JulianischesEreignis extends EreignisBasis {
 
  /**
   * Den Typ des Ereignisses ermitteln
   *
   * @return Ereignis.TYP_JULIANISCH
   */
  @Override
  public int getTyp() {
    return TYP_JULIANISCH;
  }
 
  /**
   * Die Tage eines Jahres im gregorianischen Kalendersystem ermitteln, an denen
   * das Ereignis stattfindet.
   *
   * @param isoJahr das Jahr im gregorianischen Kalender, fuer das ermittelt
   * werden soll, an welchen Tagen das Ereignis stattfindet
   * @return die Liste aus Datum-Objekten, die die Tage im gregorianischen
   * Kalender bezeichnet, an denen das Ereignis stattfindet
   */
  @Override
  public List<Datum> getZeitpunkte(long isoJahr) {
    ISOKalender g = new ISOKalender();
    long start = g.zuTagen(isoJahr, Definition.JANUAR, 1);
    long end = g.zuTagen(isoJahr, Definition.DEZEMBER, 31);
    JulianischerKalender j = new JulianischerKalender();
    Datum jStart = j.vonTagen(start);
    long jStartJahr = jStart.getJahr();
    Datum jEnd = j.vonTagen(end);
    long jEndJahr = jEnd.getJahr();
    long anzahlJahre = (jEndJahr - jStartJahr) + (long) 1;
    ArrayList list = new ArrayList();
    for (long y = 0; y < anzahlJahre; y++) {
      long tage = j.zuTagen(jStartJahr + y, (int) definition.getp1(), (int) definition.getp2());
      if(tage >= start && tage <= end) {
        list.add(g.vonTagen(tage));
      }
    }
    return list;
  }
}