Package de.uhilger.zeitrechnung.kalender
Class ChinesischerKalender
- java.lang.Object
-
- de.uhilger.zeitrechnung.kalender.BasisKalender
-
- de.uhilger.zeitrechnung.kalender.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 Tagundnachtgleichen 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 Tagundnachtgleiche 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 Summary
Fields Modifier and Type Field Description static long
STARTTAG
Der Start der chinesischen Zeitrechung laesst sich aus dem heutigen chinesischen Datum errechnen.-
Fields inherited from class de.uhilger.zeitrechnung.kalender.BasisKalender
MITTLERER_SYNODISCHER_MONAT, MITTLERES_TROPISCHES_JAHR
-
-
Constructor Summary
Constructors Constructor Description ChinesischerKalender()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description int
aktuellerSolarerHauptabschnitt(long tage)
int
aktuellerSolarerUnterabschnitt(long tage)
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 ermittelnlong
chinesischerNeumondAmOderNach(long tage)
long
chinesischerNeumondVor(long tage)
Ort
chinesischerOrt(double t)
double
chinesischeSolareLaengeAmOderNach(long tage, double theta)
boolean
hatSchaltmonatVorher(long mHaupt, long m)
boolean
keinSolarerHauptabschnitt(long tage)
double
mitternachtInChina(long tage)
long
neujahr(long isoJahr)
long
neujahrAmOderVor(long tage)
long
neujahrInSui(long tage)
Ort
peking(double t)
long
qingMing(long isoJahr)
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.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.double
solarerHauptabschnittAmOderNach(long tage)
double
solarerNebenabschnittAmOderNach(long tage)
ChinesischesDatum
vonTagen(long tage)
Das Datum des chinesischen Kalenders fuer ein generisches Datum ermitteln.long
winterSonnenwendeAmOderVor(long tage)
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.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.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.-
Methods inherited from class de.uhilger.zeitrechnung.kalender.BasisKalender
abend, aberration, alpha, arcKosGrad, arcSinGrad, arcTanGrad, bogenmassZuGrad, differenz, dynamischVonUniversal, ephemeridenKorrektur, ganzzahlQuotient, geschaetzteSolareLaengeVor, grad, gradKosinus, gradZuBogenmass, j2000, julJahrhunderte, kosGrad, letzterTag, lokalVonScheinbar, modulo, modulo, moduloAngepasst, mondBreite, mondHoehe, mondLaenge, mondphase, morgen, neumondNach, neumondVor, nterNeumond, nterTag, nutation, poly, quadrat, schiefstand, siderischVonMoment, sinGrad, solareLaenge, solareLaengeNach, sonnenaufgang, sonnenuntergang, standardVonLokal, standardVonUniversal, stunde, tagAmOderNach, tagAmOderVor, tagNach, tagVor, tanGrad, universalVonDynamisch, universalVonLokal, universalVonStandard, vonMoment, vorzeichen, winkel, wochentagVonGenerisch, zeitgleichung, zeitVonHorizont, zuMoment, zuMoment
-
-
-
-
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 Kalendersjahr
- das Jahr des chinesischen Kalendersmonat
- der Monat des chinesischen Kalendersschaltmonat
- true, wenn der Monat ein Schaltmonat ist, sonst falsetag
- 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 interfaceWandler
- Parameters:
jahr
- das Jahr im betreffenden Kalendersystemmonat
- der Monat im betreffenden Kalendersystemtag
- 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 interfaceWandler
- 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.
-
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 faelltcMonat
- Monat im chinesischen Kalender, an dem das Ereignis stattfindetcTag
- 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)
-
-