Class ChinesischerKalender

  • All Implemented Interfaces:
    Wandler, Zeitrechnung

    public class ChinesischerKalender
    extends BasisKalender
    implements Wandler
    Der traditionelle chinesichen Kalender ist unterteilt in Mond- und Sonnenjahr. Das Sonnenjahr (sui) beginnt am Tag der Wintersonnenwende ist weiter unterteilt in solare Abschnitte und noch weiter unterteilt in solare Haupt- und Unterabschnitte. Die Bahn, die die Sonne innerhalb eines tropischen Jahres von 365,24 Tagen scheinbar auf der Ekliptik durchläuft, wird in 24 Teile von je 15 Grad unterteilt. Dies sind die 24 Stationen oder Jahreseinteilungen (節氣 / 节气, jiéqì). Jede zweite Station ist ein Zhongqi (中氣 / 中气, zhōngqì – „zentrale/Haupt-Jahreseinteilung“), wobei die Sonnenwenden und Tagundnacht­gleichen vier der zwölf Zhongqi sind. Der zeitliche Abstand von einem Zhongqi zum nächsten beträgt im Mittel ein Zwölftel eines tropischen Jahres oder 30,44 Tage. Er variiert leicht aufgrund der elliptischen Umlaufbahn der Erde um die Sonne. Jeweils sechs Jahreseinteilungen gehören zu einer Jahreszeit. Während aber im westlichen Kalender die Jahreszeiten mit dem Tag der Sonnenwende bzw. der Tagundnacht­gleiche beginnen, liegen im chinesischen Kalender diese Tage in der Mitte der jeweiligen Jahreszeit. Man zählt die Stationen beginnend mit dem Frühlingsanfang – lichun, und mancherorts gilt der Frühlingsanfang (und nicht die Wintersonnenwende) als Beginn des sui-Jahres. Eine Besonderheit des Chinesischen Kalenders ist, dass ein Chinesisches Datum neben Tag, Monat und Jahr auch den Zyklus und die Angabe zum Schaltmonat benoetigt. Um die Schnittstelle Wandler vollstaendig implementieren zu koennen, werden die Methoden setZyklus und setSchaltmonat zusaetzlich eingebaut. Bei Nutzung der Wandler-Schnittstelle sollte im Falle des Chinesischen Kalenders darauf geachtet werden, dass der Methode zuTagen() entweder ein Datum der Klasse ChinesischesDatum uebergeben wird oder zuvor setZyklus und setSchaltmonat genutzt wird. Auch vor Nutzung der Methode zuTagen(jahr, monat, tag) muss zuvor setZyklus und setSchaltmonat genutzt oder stattdessen die Methode zuTagen(zyklus, jahr, monat, schaltmonat, tag) verwendet werden.
    • Field Detail

      • STARTTAG

        public static final long STARTTAG
        Der Start der chinesischen Zeitrechung laesst sich aus dem heutigen chinesischen Datum errechnen. Das erste Jahr des ersten Zyklus faellt so auf den 15. Februar -2636 im gregorianischen Kalender.
    • Constructor Detail

      • ChinesischerKalender

        public ChinesischerKalender()
    • Method Detail

      • setZyklus

        public void setZyklus​(long zyklus)
        Den Zyklus angeben, in dem ein Jahr des chinesischen Kalenders liegt, das mit der Methode zuTagen(jahr, monat, tag) in ein generisches Datum umgerechnet werden soll. Diese Methode ist eine Hilfsfunktion, wenn nicht die Methode zuTagen(zyklus, jahr, monat, schaltmonat, tag) genutzt werden kann.
        Parameters:
        zyklus - der Zyklus im chinesischen Ḱalender
      • setSchaltmonat

        public void setSchaltmonat​(boolean schaltmonat)
        Angeben, ob ein Monat eines Datums im chinesischen Kalender ein Schaltmonat ist, das mit der Methode zuTagen(jahr, monat, tag) in ein generisches Datum umgerechnet werden soll. Diese Methode ist eine Hilfsfunktion, wenn nicht die Methode zuTagen(zyklus, jahr, monat, schaltmonat, tag) genutzt werden kann.
        Parameters:
        schaltmonat -
      • zuTagen

        public long zuTagen​(long zyklus,
                            int jahr,
                            int monat,
                            boolean schaltmonat,
                            int tag)
        Die Anzahl der Tage ermitteln, die zwischen einem gegebenen Datum des chinesischen Kalenders und dem Tag liegen, der im Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist.
        Parameters:
        zyklus - der Zyklus des chinesischen Kalenders
        jahr - das Jahr des chinesischen Kalenders
        monat - der Monat des chinesischen Kalenders
        schaltmonat - true, wenn der Monat ein Schaltmonat ist, sonst false
        tag - Tag im Monat des chinesischen Kalenders
        Returns:
        Anzahl Tage, die zwischen dem gegebenen Datum des chinesischen Kalenders und dem Tag liegen, der im Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. Liegt das gegebene Datum vor dem 1. Januar 1 (gregorianisch), wird eine negative Zahl zurueckgegeben.
      • zuTagen

        public long zuTagen​(long jahr,
                            int monat,
                            int tag)
        Die Anzahl der Tage ermitteln, die zwischen einem gegebenen Datum des chinesischen Kalenders und dem Tag liegen, der im Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. Bei Verwendung dieser Methode muessen zuvor die Methode setZyklus und setSchaltmonat genutzt werden.
        Specified by:
        zuTagen in interface Wandler
        Parameters:
        jahr - das Jahr im betreffenden Kalendersystem
        monat - der Monat im betreffenden Kalendersystem
        tag - der Tag im betreffenden Kalendersysem
        Returns:
        Anzahl Tage, die zwischen dem gegebenen Datum des chinesischen Kalenders und dem Tag liegen, der im Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. Liegt das gegebene Datum vor dem 1. Januar 1 (gregorianisch), wird eine negative Zahl zurueckgegeben.
      • zuTagen

        public long zuTagen​(Datum d)
        Die Anzahl der Tage ermitteln, die zwischen einem gegebenen Datum des chinesischen Kalenders und dem Tag liegen, der im Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist.
        Specified by:
        zuTagen in interface Wandler
        Parameters:
        d - das Datum im betreffenden Kalendersystem
        Returns:
        Anzahl Tage, die zwischen dem gegebenen Datum des chinesischen Kalenders und dem Tag liegen, der im Gregorianischen Kalender mit dem Datum 1. Januar 1 bezeichnet ist. Liegt das gegebene Datum vor dem 1. Januar 1 (gregorianisch), wird eine negative Zahl zurueckgegeben.
      • vonTagen

        public ChinesischesDatum vonTagen​(long tage)
        Das Datum des chinesischen Kalenders fuer ein generisches Datum ermitteln.
        Specified by:
        vonTagen in interface Wandler
        Parameters:
        tage - Anzahl der Tage zwischen 1. Januar 1 im gregorianischen Kalender und dem Tag, dessen Datum des chinesischen Kalenders ermittelt werden soll
        Returns:
        das Datum im chinesischen Kalender
      • neujahr

        public long neujahr​(long isoJahr)
      • qingMing

        public long qingMing​(long isoJahr)
      • cDatumZuTagen

        public long cDatumZuTagen​(long isoJahr,
                                  int cMonat,
                                  int cTag)
        Das generische Datum des Tages mit einem gegebenen festen Datum im chinesischen Kalender fuer ein gegebenes gregorianisches Jahr ermitteln
        Parameters:
        isoJahr - Jahr im gregorischen Kalender, in das ein gesuchtes Ereignis faellt
        cMonat - Monat im chinesischen Kalender, an dem das Ereignis stattfindet
        cTag - Tag im Monat des chinesischen Kalenders, an dem das Ereignis stattfindet
        Returns:
        generisches Datum des Ereignisses
      • hatSchaltmonatVorher

        public boolean hatSchaltmonatVorher​(long mHaupt,
                                            long m)
      • mitternachtInChina

        public double mitternachtInChina​(long tage)
      • peking

        public final Ort peking​(double t)
      • chinesischerOrt

        public final Ort chinesischerOrt​(double t)
      • neujahrAmOderVor

        public long neujahrAmOderVor​(long tage)
      • neujahrInSui

        public long neujahrInSui​(long tage)
      • winterSonnenwendeAmOderVor

        public long winterSonnenwendeAmOderVor​(long tage)
      • keinSolarerHauptabschnitt

        public boolean keinSolarerHauptabschnitt​(long tage)
      • aktuellerSolarerHauptabschnitt

        public int aktuellerSolarerHauptabschnitt​(long tage)
      • solarerHauptabschnittAmOderNach

        public double solarerHauptabschnittAmOderNach​(long tage)
      • solarerNebenabschnittAmOderNach

        public double solarerNebenabschnittAmOderNach​(long tage)
      • chinesischeSolareLaengeAmOderNach

        public double chinesischeSolareLaengeAmOderNach​(long tage,
                                                        double theta)
      • aktuellerSolarerUnterabschnitt

        public int aktuellerSolarerUnterabschnitt​(long tage)
      • chinesischerNeumondAmOderNach

        public long chinesischerNeumondAmOderNach​(long tage)
      • chinesischerNeumondVor

        public long chinesischerNeumondVor​(long tage)