Die ewige Kalenderproduktion hier verwendet hauptsächlich die Kalenderklasse und die Gregoriancalendar -Klasse. Lassen Sie uns zunächst die Grundlagen überprüfen:
Grundteile
1. Kalenderklasse.
1. Hauptfelder:
Jahr (Jahr), Monat (Monat beginnt ab 0), Datum (Januarag), Stunde (zeigt die Stunde am Morgen oder Nachmittag an), Hour_f_day (die Stunde am Tag angibt), DAY_OF_WEEK (zeigt die Anzahl der Wochen in der Woche an). Anzahl der Wochen im Monat), week_of_year (zeigt die Anzahl der Wochen im Jahr an)
2. Holen Sie sich Kalenderklassenobjekt.
// Erhalten Sie die statische Methode, um die Kalenderklasse zu erhalten. Kalender ca = calendar.getInstance ();
3. Hauptmethoden
void set (int field, int value) // Die Parameter der Feldkalenderklasse, wie z. B. Vorjahresdatum usw. .... void set (int Jahr, int Monats, int -Datum) // Set Jahr, Monat und Tag. VOID SET (INT -Jahr, int Monats, int Datum, int stündlich, int Minute) // Set Jahr, Monat, Tag, Stunde und Minute) // Set Jahr, Monat, Tag, Stunde, Minute und zweites Void -Set (Datum); // Legen Sie die Zeit dieses Kalenders mit dem angegebenen Datum fest. Int Get (int Feld) // Gibt den Wert des angegebenen Kalenderfelds zurück. Zum Beispiel: int monon = acobj.get (Kalender.month); Datum GetTime () // Gibt ein Datumsobjekt zurück, das den Kalenderzeitwert darstellt. Langes GetTimeInmillis () // gibt die Anzahl der Millisekunden von 1970.1.1 00:00:00 in den Kalender zurück. void add (int field, amont); // gemäß den Kalenderregeln, addieren oder subtrahieren Sie die angegebene Zeitspanne für ein bestimmtes Kalenderfeld. Kann hinzugefügt oder subtrahiert werden. Zum Beispiel: Caobj.add (Kalender.Month, 1) nächsten Monat.
2. Gregoriancalendar -Klasse.
1. Erhalten Sie dieses Klassenobjekt
Kalender ca = neuer Gregoriancalendar () // Standard aktueller Moment. Kalender CA = NEU Gregoriancanlendar (int Jahr, int Monats, int Dayofmonth) // Zunächst das Objekt Gregorian Class mit einem bestimmten Jahr, Monat und Tag. Kalender CA = NEU Gregoriancanlendar (int Jahr, int Monats, int Dayofmonth, int Hourofday, int Minute) Das Objekt der Gregorianischen Klasse hat zunächst ein bestimmtes Jahr, Monat und Tag. Kalender CA = NEU Gregoriancanlendar (int Jahr, int Monats, int Dayofmonth, int Hourofday, int Minute, int Second) // Zunächst das Objekt Gregorian Class mit einem bestimmten Jahr, Monat und Tag. Die obigen werden alle erhalten, indem das Standard -Gebietsschema und die Standardzeitzonenobjekte erhalten werden.
2. Nutzungsnutzung erbt hauptsächlich den übergeordneten Klassenkalender.
Beispielabschnitt
3. Perpetual Kalendercode
Paket com.via.mce.monthcalendar <br> * Sparen Sie die Größe des Jahres, des Monats und der früheren Solarbegriffe zwischen 1901 und 2100 des Mondkalenders und berechnen Sie dann basierend auf diesen Daten. <br> * <br> * Es wurden mehrere konstante Attributfelder für den Mondkalender hinzugefügt, und Sie können die methode get () verwenden, um den entsprechenden Wert des Kalenders zu erhalten. <br> * Mondkalenderjahr, Monat und Tag können auch mit der Methode set ()/add ()/rol () festgelegt werden, und andere Attribute für Mondkalender werden automatisch berechnet. <br> * Zusätzlich wird die GetChinese -Methode (int Field) bereitgestellt, um den chinesischen Text des Mondkalenders zu erhalten (nur für Mondkalenderattribute und Woche anwendbar). <br> * <ul> * <li> chinesisches Jahr - Mondjahr </li> * <li> chinesische_month - Mondmonat </li> * <li> chinesische_date - Mondtag </li> * <li> chinesisches termm_sectional_term - Solar -Terms des Monats </li> * <li> chinesisch -principt_term term - tectional qi des Monats des Monats </li> * <li> chinesisch -princel_term term - term term - term term term term - term term term term term - term - tection qi qi des Monats </li> * <li> chinesisch -principle - term term - term term term term term term - tection - tection tection Stämme des Mondjahres </li> * <li> chinesische_earthly_branch - irdische Zweige des Mondjahres </li> * <li> chinesische_zodiac - Zodiac des Mondjahres </li> * <li> chinesische_Term_or_date - Wenn es einen Solar -Term am Tag gibt, zeigt dies den SOLAR -Term. Andernfalls zeigt er den Mondmonat an, wenn der Tag der erste Tag des Tages angeht, andernfalls zeigt er den Mondtag an. * </ul> * Hinweis: <br> * Aufgrund der Einstellung der Kalenderklasse beginnt der Gregorianische Monat mit 0. Alle Methoden folgen dieser Konvention. <br> * Aber alle Mondattribute beginnen ab 1. Auch in der von Kalender bereitgestellten Methode, der Mondmonat beginnt mit 1 und repräsentiert den Schaltmonat mit einer negativen Zahl. <br> * Die Clear () -Methode führt dazu, dass der Mondkalender und der Gregorianische Kalenderdaten inkonsistent sein oder der erwartete Reset -Effekt kann nicht erreicht werden. Es sollte so weit wie möglich vermieden werden. <br> * Bei der Verwendung von GetSimpledateString (), um den Gregorianischen Kalenderdatum -String zu erhalten, wurde der gregorianische Kalendermonat korrigiert. <br> * Bei Verwendung von GetImplechineDateString (), um die Mondkalenderdatumzeichenfolge zu erhalten, wird der Mondschleppmonat durch * dargestellt. <br> * * @Version 0.12 2011-9-5 <br> * <Blockquote> Bei der Initialisierung des Kalenders mit dem ersten Monat des Mondkalenders wurde ein Problem behoben, in dem der Kalender in einem toten Zyklus gefangen war. </blockquote> * @Version 0.11 2009-12-27 <br> * <Blockquote> Das Problem behoben, bei dem der Mondkalender bei der Erhalt des chinesischen Mondkalenders nicht berechnet wurde; <br> * Fügen Sie ein Feld hinzu. </blockquote> * @Version 0.10 2009-12-22 */Public Final Class Chinesecalendar erweitert Gregoriancalendar {private statische endgültige lange Serialversionuid = 8L; / ** Mondjahr*/ öffentliches statisches Final int chinesische_year = 801; / ** Mondmonat*/ öffentliches statisches Final int chinesische_month = 802; / ** Mondtag*/ öffentliches statisches Final int chinesische_date = 803; / ** Gregorianischer Tag entspricht der Sonnenbegriff des Monats (der vorherige Sonnenbegriff)*/ öffentliches statisches endgültiges int chinese_sectional_term = 804; / ** Gregorianischer Tag entspricht der Sonnenbegriff des Monats (der nächste Sonnenbegriff)*/ öffentliches statisches endgültiges int chinese_principle_term = 805; / ** Himmlische Stängel*/ öffentliches statisches Final int chinesische_heavenly_stem = 806; / ** irdische Zweige*/ public static final int chinese_eartly_branch = 807; / ** Sternzeichen (Zodiac Signs)*/ Public static Final int chinese_zodiac = 808; / ** Sonnenbegriff oder Mondtag*/ public static final int chinese_ter_or_date = 888; // Hinzufügen von Skywang/ ** Lunar Festival*/ Public static Final int lunar_festival = 809; / ** Solar Term*/ public static final int solar_festival = 810; / ** Sonnenbegriff*/ public static final int chinese_term = 811; / ** Monat oder Mondtag*/ public static final int chinese_month_or_date = 812; / ** Festival oder Sonnenbegriff oder Mondtag*/ public static Final Int Festival_Oter_ter_or_date = 813; privates int chinesischer; Privat int Chinesather; // Beginnen Sie mit 1, negative Zahlen repräsentieren LEAP Month Private int Chinesedate; privates int -Abschnitt; // Gregorian Day Private Int Princiationm; // Gregorian Day Private Boolesche sind chinesische Feldteile. // ob das Monddatum berechnet und bestätigt wurde, dass der private boolesche Aresolarterms computed; // Ob der Sonnenbegriff berechnet und bestätigt wurde, privat boolean lastsetchinese; // ist die letzte Einstellung des Mondattributs/** Erstellen Sie eine Instanz mit der aktuellen Zeit. */ public chinesecalendar () {Super (); } /** Erstellen Sie eine Instanz mit der angegebenen Zeit. */ public Chinesecalendar (Datum d) {Super.Settime (d); } /** Erstellen Sie eine Instanz mit der angegebenen Zeit. */ public Chinesecalendar (Kalender c) {this (c.GetTime ()); } /** Erstellen Sie eine Instanz mit dem angegebenen Gregorianischen Datum. */ public Chinesecalendar (int y, int m, int d) {Super (y, m, d); } /*** Erstellen Sie eine Instanz mit dem angegebenen Datum. * * @param ischinese * Ist es das Monddatum * @param y * @param m * @param d */ public chinesecalendar (boolean ischinese, int y, int m, int d) {if (ischinese) {set (chinesische_year, y); set (chinesische month, m); set (chinesische_date, d); } else {set (y, m, d); }} public void set (int field, int value) {computeIfneed (field); if (ischinesefield (field)) {// Mondkalender -Attribut -Switch (Feld) {case chinese_year: chinesischeyear = value; brechen; Fall Chinese_month: Chinesonthe = Wert; brechen; case chinese_date: chinesedate = value; brechen; Standard: Wirf neu illegalArgumentException ("nicht unterstützte Feldeinstellungen:" + Feld); } lastsetchinese = true; } else {// Nicht-Lunar-Kalenderattribut Super.set (Feld, Wert); lastsetchinese = false; } areFieldsSet = false; ARechineSefields computed = false; aresolarterms computed = false; } public int get (int field) {computeIfneed (field); if (! iSchinesefield (field)) {return super.get (field); } switch (field) {case chinese_year: zurück chinesische year; Fall Chinese_month: Rückkehr Chinesonthe; Fall Chinese_date: Rückkehr Chinesedate; Fall Chinese_sectional_ter: Rückgabeabschnitt; Fall Chinese_Principle_term: Rückgabeprinzipletär; Fall Chinese_Heavenly_Stem: Return (Chineseyear - 4) % 10 + 1; Fall Chinese_earthly_Branch: Case Chinese_zodiac: Return (Chineseyear - 4) % 12 + 1; case chinese_month_or_date: if (get (chinesische) == 1) {return chinesische_month; } else {return chinese_date; } case chinese_term_or_date: intoption; if (get (calendar.date) == get (chinesische_sectional_term)) {option = chinese_sectional_term; } else if (get (calendar.date) == Get (chinesische_principle_term)) {option = chinesische_principle_term; } else if (get (chinesische) == 1) {option = chinesische_month; } else {option = chinesische_date; } Rückgabeoption; Standard: Wirf neu illegalArgumentException ("nicht unterstütztes Feld Get:" + Field); }} public void add (int field, intmenge) {computeIfneed (field); if (! iSchinesefield (field)) {Super.Add (Feld, Betrag); lastsetchinese = false; ARechineSefields computed = false; aresolarterms computed = false; zurückkehren; } switch (field) {case chinese_year: chinesisches year += seng; brechen; Fall Chinese_month: für (int i = 0; i <seng; i ++) {Chinesemonth = NextChinesemonth (chinesische year, chinesonthe); if (Chinesemonth == 1) {Chineseyear ++; } } brechen; case chinese_date: int maxdate = Daysinchinemather (chinesische year, Chinesatherth); für (int i = 0; i <Menge; i ++) {Chinesedate ++; if (Chinesedate> maxdate) {Chinesedate = 1; Chinesemonth = NextChinesemon (chinesische, Chinesonth); if (Chinesemonth == 1) {Chineseyear ++; } MaxDate = Daysinchinesonthe (chinesische, Chinesonthe); }} Standard: neue illegalArgumentException ("nicht unterstütztes Feld:" + Feld); } lastsetchinese = true; ArefieldsSet = false; ARechineSefields computed = false; aresolarterms computed = false; } public void roll (int field, int orte) {computeIfneed (field); if (! Isschinesefield (Feld)) {Super.roll (Feld, Betrag); lastsetchinese = false; ARechineSefields computed = false; aresolarterms computed = false; zurückkehren; } switch (field) {case chinese_year: chinesisches year += seng; brechen; Fall Chinese_month: für (int i = 0; i <seng; i ++) {Chinesemonth = NextChinesemonth (chinesische year, chinesonthe); } brechen; case chinese_date: int maxdate = Daysinchinemather (chinesische year, Chinesatherth); für (int i = 0; i <Menge; i ++) {Chinesedate ++; if (Chinesedate> maxdate) {Chinesedate = 1; }} Standard: neue illegalArgumentException ("nicht unterstütztes Feld:" + Feld); } lastsetchinese = true; ArefieldsSet = false; ARechineSefields computed = false; aresolarterms computed = false; } /*** Holen Sie sich die chinesische Sprache des Attributs. * * @param field * @return */ public String getChinese (int field) {computeIfneed (field); switch (field) {case chinese_year: return getChinese (chinesische_heavenly_stem) + getChinese (chinesische_earthly_branch) + "Jahr"; case chinese_month: if (Chinesemonth> 0) return ChinesemonthNames [Chinesonthe] + "Monat"; sonst return "lap" + ChinesemonthNames [-Chinesonthe] + "Monat"; case chinesische_date: return ChinesedateNames [Chinesedate]; Fall Chinese_Sectional_ter: Rückgabeabschnittsnamen [Get (Calendar.month)]; Fall Chinese_Principle_ter: RückgabeprinzipleTerMnames [get (Calendar.month)]; Fall Chinese_heavenly_stem: Return Stemname [Get (Field)]; case chinesische_earthly_branch: return agiNnames [get (field)]; Fall Chinese_Zodiac: Return AnimalNames [Get (Feld)]; Fall calendar.day_of_week: return chineseweeknames [get (field)]; case chinese_term_or_date: return getChinese (get (chinesische_term_or_date)); case lunar_festival: return getLunarfestival (); case Solar_festival: return getolarFestival (); case Festival_or_term_or_date: return getFestivalorterDate (); // todo check case chinese_month_or_date: return getChinese (get (chinesische_month_or_date)); Fall Chinese_term: Return getChinesEseterm (); Standard: Wirf neu illegalArgumentException ("nicht unterstütztes Feld Chinesisch Get:" + Field); }} public String getImplegegregorIandatestring () {return New StringBuffer (). Anhänge (get (Jahr)). append ("-") .Append (get (monat) + 1) .Append ("-"). append (get (get (date)) .ToString (); } public String getImplechineDateString () {return New StringBuffer () .Append (get (chinesische) .And ("-") .Append (get (chinesische_month)? "" + Get (chinesische): "*" + (--chinesische)). Anhang ("-"). ("). ("). ("). ("). } public String getChinesedatestring () {return New StringBuffer (). Anhänge (getChinese (chinesische_year). } public String toString () {stringBuffer buf = new StringBuffer (); buf.Append (GetImpregoriandatestring ()). append ("|") .Append (getChinese (DAY_OF_WEEK). Anhänge ("| [Mondkalender]. .Append (get (chinesische_sectional_term)). append ("tag") .Append (getChinese (chinesische_sektional_term)). Anhänge ("") .And (get (chinesisch -principle_term)). Append ("Day") .And (getChinese (chinesisch -principle_term)); return buf.tostring (); } / ** * Bestimmen Sie, ob es sich um ein Mondattribut handelt. CHINEER_MTER_OR_DATE: CASE CHINA_MONTH_OR_DATE: Return True; Standard: false zurückgeben; }} / ** * Bestimmen Sie, ob es sich um ein Attribut handelt, das sich auf den Solar -Term bezieht Standard: false zurückgeben; }} /** * Wenn die Attribute, die letztes Mal festgelegt wurden, nicht übereinstimmen, die diesmal festgelegt oder erhalten werden sollen (Mondkalender /Gregorianer Kalender), <br> * * Zum Beispiel, als ich das letzte Mal festgelegt habe, war es der Mondkalender, und jetzt möchte ich das GREGRORIAN -KALENDAR -DATOR -DATOR -DATUR -Datum berechnen. * * @param field */ private void computeIfNeed (int field) {if (iSchinesefield (field)) {if (! lastsetchinese &&! arechineSefields computed) {super.complete (); computerechinsefields (); ArefieldsSet = true; ARechineSefields computed = true; aresolarterms computed = false; } if (iSchinesetermsfield (field) &&! aresolarterms computed) {computersarterms (); aresolarterms computed = true; }} else {if (lastsetchinese &&! areFieldsSet) {computegregorianfields (); super.complete (); ArefieldsSet = true; ARechineSefields computed = true; aresolarterms computed = false; }}} / *** Verwenden Sie das Monddatum, um das Gregoriandate zu berechnen int m = Chinesonth; int d = Chinesedate; ARechineSefields computed = true; ArefieldsSet = true; lastsetchinese = false; // Passen Sie den Datumsbereich an, wenn (y <1900) y = 1899; sonst wenn (y> 2100) y = 2101; if (m <-12) m = -12; sonst wenn (m> 12) m = 12; if (d <1) d = 1; sonst wenn (d> 30) d = 30; int dateInt = y * 10000 + math.abs (m) * 100 + d; if (DateInt <19001111) {// Too Small Set (1901, Calendar.January, 1); super.complete (); } else if (DateInt> 21001201) {// zu groß (2100, Calendar.December, 31); super.complete (); } else {if (math.abs (m)> 12) {m = 12; } int toy = chinesecalendar.daySinchinchinemonth (y, m); if (Tage == 0) {m = -m; Tage = Chinesecalendar.DaySsinchinemonth (y, m); } if (d> Tage) {d = Tage; } set (y, math.abs (m) - 1, d); computerechinsefields (); intmenge = 0; while (chinesischeyear! Chinesemonth = NextChinesemon (chinesische, Chinesonth); if (Chinesemonth == 1) {Chineseyear ++; }} Menge += d - Chinesedate; Super.Add (Kalender.Date, Betrag); } computerechinsefields (); } / *** Berechnen Sie das Datum des Mondkalenders anhand des Gregorianischen Datums* / private void computechineSefields () {int Gregorianyear = internget (calendar.year); Int Gregorianghmonth = Internetget (Kalender.month) + 1; Int Gregoriandate = internget (Kalender.Date); if (Gregorianyear <1901 || Gregorianyear> 2100) {return; } int startyear, startmonth, startdate; if (Gregorianyear <2000) {startyear = baseyear; startmonth = basemonth; StartDate = basiert; chinesisches year = basechineseyear; ChinesontH = Basechinesathere; Chinesedate = Basechinesedate; } else {// Der zweite entsprechende Tag wird verwendet, um die Computereffizienz zu verbessern // 1. Januar 2000, der entsprechende Mondkalender 4697 (1999), startyear = baseyear + 99; startmonth = 1; StartDate = 1; Chineseyear = Basechineseyear + 99; Chinesonth = 11; Chinesedate = 25; } int DaysDiff = 0; // Jahr für (int i = startyear; i <gregorianyear; i ++) {if (isgregorianleapyear (i)) {DaysDiff+= 366; // Sprungjahr} else {DaysDiff += 365; }} // Monat für (int i = startMonth; i <gregorianghonth; i ++) {DaysDiff+= DayingRegoriangiANMonth (Gregorianyear, i - 1); } // Daydaysdiff += Gregoriandate - StartDate; Chinesedate += DaysDiff; int lastDate = Daysinchinemather (chinesisches, Chinesonth); while (Chinesedate> lastDate) {Chinededate -= lastDate; Chinesemonth = NextChinesemon (chinesische, Chinesonth); if (Chinesemonth == 1) {Chineseyear ++; } lastDate = Daysinchinemather (chinesische, Chinesonth); }} / *** Berechnen Sie Solarterme* / private voidesolarterms () {int Gregorianyear = internget (calendar.year); Int Gregorianghmonth = InternetGet (Kalender.month); if (Gregorianyear <1901 || Gregorianyear> 2100) {return; } sectionalterm = sectionalterm (Gregorianyear, Gregoriangonmonth); Prinzipletär = Prinzipentum (Gregorianyear, Gregorianghonth); } / * Als nächstes ist die statische Methode ~ * / / ** * Ist es ein Schaltjahr im Gregorianischen Jahr * * @param Jahr * @return * / public static boolean igregorianleapyear (int Jahr) {boolean isleap = false; if (Jahr % 4 == 0) {isleap = true; } if (Jahr % 100 == 0) {isleap = false; } if (Jahr % 400 == 0) {isleap = true; } return isleap; } /*** Berechnen Sie die Anzahl der Tage im Gregorianischen Jahr, und der Gregorianische Monat beginnt ab 0! * * @param y * @param m * @return */ public static int DaysingoriRiANMonth (int y, int m) {int d = DayingRegoriANMonth [m]; if (m == calendar.february && isgregorianleapyear (y)) {d ++; // Ein weiterer Tag in einem Schaltjahr im gregorianischen Jahr} Rückkehr d; } /*** Berechnen Sie die Solarbedingungen des Gregorianischen Monats, der Gregorianische Monat startet ab 0! * * @param y * @param m * @return */ public static int § (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseyear + 1; while (ry> = sectionalteryear [m - 1] [index]) {index ++; } int term = sectionaltermmap [m - 1] [4 * index + ry % 4]; if ((ry == 121) && (m == 4)) {Term = 5; } if ((ry == 132) && (m == 4)) {Term = 5; } if ((ry == 194) && (m == 6)) {Term = 6; } return Term; } /*** Berechnen Sie den Zhongqi des Gregorianischen Jahres, und der Gregorianische Monat beginnt ab 0! * * @param y * @param m * @return */ public static Int Principerm (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseyear + 1; while (ry> = PrinciatRetReteMyear [m - 1] [index]) {index ++; } int Term = PrincipterMmap [m - 1] [4 * Index + ry % 4]; if ((ry == 171) && (m == 3)) {Term = 21; } if ((ry == 181) && (m == 5)) {Term = 21; } return Term; } / ** * Berechnen Sie die Anzahl der Tage im Mondjahr * * @param y * @param m * @return * / public static int Daysinchinchinemonth (int y, int m) {// Anmerkung: Leap Month M <0 int index = y - basechineseyear + baseIndex; int v = 0; int l = 0; int d = 30; if (1 <= m && m <= 8) {v = Chinesemonths [2 * Index]; L = m - 1; if (((v >> l) & 0x01) == 1) {d = 29; }} else if (9 <= m && m <= 12) {v = Chinesaten [2 * Index + 1]; L = M - 9; if (((v >> l) & 0x01) == 1) {d = 29; }} else {v = Chinesaten [2 * Index + 1]; v = (v >> 4) & 0x0f; if (v! = math.abs (m)) {d = 0; } else {d = 29; für (int i = 0; i <bigleapmonthyears.length; i ++) {if (bigleapmonthyears [i] == INDEX) {d = 30; brechen; }}}} return d; } / ** * Berechnen Sie den nächsten Monat des Mondkalenders * * @param y * @param m * @return * / public static int NextChinesemon (int y, int m) {int n = math.abs (m) + 1; if (m> 0) {int index = y - basechineseyear + BaseIndex; int v = Chinesaten [2 * Index + 1]; v = (v >> 4) & 0x0f; if (v == m) {n = -m; }} if (n == 13) {n = 1; } return n; } /* Datum des ersten private statische endgültige int basemonate = 1; private statische endgültige int -basiert = 1; private statische endgültige int baseIndex = 0; privates statisches Final int Basechineseyear = 1900; private statische endgültige Int BasechineMonth = 11; privates statisches endgültiges int -Basechinesedate = 11; /* Chinesische String*/ private statische endgültige String [] Chineseweeknames = {"", "Sonntag", "Montag", "Dienstag", "Donnerstag", "Freitag", "Samstag"}; private statische endgültige String [] ChinesemonthNames = {"", "First", "Three", "Four", "Five", "Six", "Seven", "acht", "Nine", "Ten", "Ten", "Eleven", "Twelve"}; private static final String[] chineseDateNames = { "", "First", "First", "Fourth", "Five", "Sixth", "Seventh", "Eighth", "Nine", "Nine", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel", "Zehntel"}; private static final String[] principleTermNames = { "Great Cold", "Rain Water", "Spring Equinox", "Green Rain", "Summer Solar", "Green Summer", "Green Summer", "Green Summer", "Green Summer", "Summer Solar", "Green Summer", "Starry Summer", "September Equinox", "September Equinox", "Frost fall", "Light snow", "Winter Solstice" }; private statische endgültige String [] Abschnitt TERMNAMES = {"Little Cold", "Bird Spring", "Jingzhe", "Qingming", "Beginn des Sommers", "Körner Samen", "Little Heat", "Bird Autumn", "White Dew", "Cold Dew", "Breaking Winter", "High Snow"}; private statische endgültige String [] Stemnames = {"", "Jia", "Yi", "Bing", "Ding", "Wu", "Ji", "Geng", "Xin", "Ren", "GUI"}; private statische endgültige String [] Branchnames = {"", "zi", "ug", "yin", "mao", "chen", "si", "wu", "shen", "du", "xu", "hai"}; private statische endgültige String [] Animalnames = {"", "Ratte", "Ochsen", "Tiger", "Kaninchen", "Drache", "Schlange", "Pferd", "Schaf", "Affe", "Hühnchen", "Hund", "Schwein"}; / * Weiter ist die Datenkomprimierungstabelle ~ */ private statische endgültige int [] bigleapmonthyears = {6, 14, 19, 25, 33, 36, 38, 41, 44, 52, 55, 79, 117, 136, 147, 150, 155, 158, 185, 193}; private static final char[][] sectionalTermMap = { { 7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5 }, { 5, 4, 5, 5, 5, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 3, 3, 4, 4, 3, 3, 3 }, { 6, 6, 6, 7, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 4, 5, 5, 5, 5 }, { 5, 5, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 4, 5, 5, 5, 4, 4, 5, 5, 4, 4, 4, 5, 4, 4, 4, 4, 5 }, { 6, 6, 6, 7, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 4, 5, 5, 5, 5 }, { 6, 6, 7, 7, 6, 6, 6, 7, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 4, 5, 5, 5, 5 }, { 7, 8, 8, 8, 7, 7, 8, 8, 7, 7, 7, 8, 7, 7, 7, 7, 6, 7, 7, 7, 6, 6, 7, 7, 6, 6, 6, 7, 7 }, { 8, 8, 8, 9, 8, 8, 8, 8, 7, 8, 8, 8, 7, 7, 8, 8, 7, 7, 7, 8, 7, 7, 7, 7, 6, 7, 7, 7, 6, 6, 7, 7, 7 }, { 8, 8, 8, 9, 8, 8, 8, 8, 7, 8, 8, 8, 7, 7, 8, 8, 7, 7, 7, 8, 7, 7, 7, 7, 6, 7, 7, 7, 7 }, { 9, 9, 9, 9, 8, 9, 9, 9, 8, 8, 9, 9, 8, 8, 8, 9, 8, 8, 8, 8, 7, 8, 8, 8, 7, 7, 8, 8, 8 }, { 8, 8, 8, 8, 7, 8, 8, 8, 7, 7, 8, 8, 7, 7, 7, 8, 7, 7, 7, 7, 6, 7, 7, 7, 6, 6, 7, 7, 7}, {7, 8, 8, 8, 7, 7, 8, 8, 7, 7, 7, 8, 7, 7, 7, 7, 6, 7, 7, 6, 6, 7, 7, 6, 6, 6, 7, 7}}; private static final char[][] sectionalTermYear = { { 13, 49, 85, 117, 149, 185, 201, 250, 250 }, { 13, 45, 81, 117, 149, 185, 201, 250 }, { 13, 48, 84, 112, 148, 184, 200, 201, 250 }, { 13, 45, 76, 108, 140, 172, 200, 201, 250 }, { 13, 44, 72, 104, 132, 168, 200, 201, 250 }, { 5, 33, 68, 96, 124, 152, 188, 200, 201 }, { 29, 57, 85, 120, 148, 176, 200, 201, 250 }, { 13, 48, 76, 104, 132, 168, 196, 200, 201 }, { 25, 60, 88, 120, 148, 184, 200, 201, 250 }, { 16, 44, 76, 108, 144, 172, 200, 201, 250 }, { 28, 60, 92, 124, 160, 192, 200, 201, 250 }, { 17, 53, 85, 124, 156, 188, 200, 201, 250 } }; private static final char[][] principleTermMap = { { 21, 21, 21, 21, 21, 20, 21, 21, 21, 20, 20, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 19, 20, 20, 20, 19, 19, 20 }, { 20, 19, 19, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 18, 19, 19, 19, 18, 18, 19, 19, 18, 18, 18, 18, 18, 18, 18 }, { 21, 21, 21, 22, 21, 21, 21, 21, 20, 21, 21, 21, 20, 20, 21, 21, 20, 20, 20, 21, 20, 20, 20, 20, 19, 20, 20, 20, 20 }, { 20, 21, 21, 21, 20, 20, 21, 21, 20, 20, 20, 21, 20, 20, 20, 20, 19, 20, 20, 20, 19, 19, 20, 20, 19, 19, 19, 20, 20 }, { 21, 22, 22, 22, 21, 21, 22, 22, 21, 21, 21, 22, 21, 21, 21, 21, 20, 21, 21, 21, 20, 20, 21, 21, 20, 20, 20, 21, 21 }, { 22, 22, 22, 22, 21, 22, 22, 22, 21, 21, 22, 22, 21, 21, 21, 22, 21, 21, 21, 21, 20, 21, 21, 21, 20, 20, 21, 21, 21 }, { 23, 23, 24, 24, 23, 23, 23, 24, 23, 23, 23, 23, 22, 23, 23, 23, 22, 22, 23, 23, 22, 22, 22, 23, 22, 22, 22, 22, 23 }, { 23, 24, 24, 24, 23, 23, 24, 24, 23, 23, 23, 24, 23, 23, 23, 23, 22, 23, 23, 23, 22, 22, 23, 23, 22, 22, 22, 23, 23 }, { 23, 24, 24, 24, 23, 23, 24, 24, 23, 23, 23, 24, 23, 23, 23, 23, 22, 23, 23, 23, 22, 22, 23, 23, 22, 22, 22, 23, 23 }, { 24, 24, 24, 24, 23, 24, 24, 24, 23, 23, 24, 24, 23, 23, 23, 24, 23, 23, 23, 23, 22, 23, 23, 23, 22, 22, 23, 23, 23 }, { 23, 23, 23, 23, 22, 23, 23, 23, 22, 22, 23, 23, 22, 22, 22, 23, 22, 22, 22, 22, 21, 22, 22, 22, 21, 21, 22, 22, 22 }, { 22, 22, 23, 23, 22, 22, 22, 23, 22, 22, 22, 22, 21, 22, 22, 22, 21, 21, 22, 22, 21, 21, 21, 22, 21, 21, 21, 21, 22}}; private static final char[][] principleTermYear = { { 13, 45, 81, 113, 149, 185, 201 }, { 21, 57, 93, 125, 161, 193, 201 }, { 21, 56, 88, 120, 152, 188, 200, 201 }, { 21, 49, 81, 116, 144, 176, 200, 201 }, { 17, 49, 201 }, { 28, 60, 88, 116, 148, 180, 200, 201 }, { 25, 53, 84, 112, 144, 172, 200, 201 }, { 29, 57, 89, 120, 148, 180, 200, 201 }, { 17, 45, 73, 108, 140, 168, 200, 201 }, { 28, 60, 92, 124, 160, 192, 200, 201}, {16, 44, 80, 112, 148, 180, 200, 201}, {17, 53, 88, 120, 156, 188, 200, 201}}; Private statische Finale char [] Daysingregoriangianghmmonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31}; private static final char[] chineseMonths = { 0x00, 0x04, 0xad, 0x08, 0x5a, 0x01, 0xd5, 0x54, 0xb4, 0x09, 0x64, 0x05, 0x59, 0x45, 0x95, 0x95, 0x0a, 0xa6, 0x04, 0x55, 0x24, 0xad, 0x08, 0x5a, 0x62, 0xda, 0x04, 0xb4, 0x05, 0xb4, 0x55, 0x52, 0x0d, 0x94, 0x0a, 0x4a, 0x2a, 0x56, 0x02, 0x6d, 0x71, 0x6d, 0x01, 0xda, 0x02, 0xd2, 0x52, 0xa9, 0x05, 0x49, 0x0d, 0x2a, 0x45, 0x2b, 0x09, 0x56, 0x01, 0xb5, 0x20, 0x6d, 0x01, 0x59, 0x69, 0xd4, 0x0a, 0xa8, 0x05, 0xa9, 0x56, 0xa5, 0x04, 0x2b, 0x09, 0x9e, 0x38, 0xb6, 0x08, 0xec, 0x74, 0x6c, 0x05, 0xd4, 0x0a, 0xe4, 0x6a, 0x52, 0x05, 0x95, 0x0a, 0x5a, 0x42, 0x5b, 0x04, 0xb6, 0x04, 0xb4, 0x22, 0x6a, 0x05, 0x52, 0x75, 0xc9, 0x0a, 0x52, 0x05, 0x35, 0x55, 0x4d, 0x0a, 0x5a, 0x02, 0x5d, 0x31, 0xb5, 0x02, 0x6a, 0x8a, 0x68, 0x05, 0xa9, 0x0a, 0x8a, 0x6a, 0x2a, 0x05, 0x2d, 0x09, 0xaa, 0x48, 0x5a, 0x01, 0xb5, 0x09, 0xb0, 0x39, 0x64, 0x05, 0x25, 0x75, 0x95, 0x0a, 0x96, 0x04, 0x4d, 0x54, 0xad, 0x04, 0xda, 0x04, 0xd4, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x52, 0x0d, 0x92, 0x0a, 0x56, 0x6a, 0x56, 0x02, 0x6a, 0x41, 0xda, 0x02, 0xb2, 0xa1, 0xa9, 0x05, 0x49, 0x0d, 0x0a, 0x6d, 0x2a, 0x09, 0x56, 0x01, 0xad, 0x50, 0x6d, 0x01, 0xd9, 0x02, 0xd1, 0x3a, 0xa8, 0x05, 0x29, 0x85, 0xa5, 0x0c, 0x2a, 0x09, 0x96, 0x54, 0xb6, 0x08, 0x6c, 0x09, 0x64, 0x45, 0xd4, 0x0a, 0xa4, 0x05, 0x51, 0x25, 0x95, 0x0a, 0x2a, 0x72, 0x5b, 0x04, 0xb6, 0x04, 0xac, 0x52, 0x6a, 0x05, 0xd2, 0x0a, 0xa2, 0x4a, 0x4a, 0x05, 0x55, 0x94, 0x2d, 0x0a, 0x5a, 0x02, 0x75, 0x61, 0xb5, 0x02, 0x6a, 0x03, 0x61, 0x45, 0xa9, 0x0a, 0x4a, 0x05, 0x25, 0x2d, 0x09, 0x9a, 0x68, 0xda, 0x08, 0xb4, 0x09, 0xa8, 0x59, 0x54, 0x03, 0xa5, 0x0a, 0x91, 0x3a, 0x96, 0x04, 0xad, 0xb0, 0xad, 0x04, 0xda, 0x04, 0xf4, 0x62, 0xb4, 0x05, 0x54, 0x0b, 0x44, 0x5d, 0x52, 0x0a, 0x95, 0x04, 0x55, 0x22, 0x6d, 0x02, 0x5a, 0x71, 0xda, 0x02, 0xaa, 0x05, 0xb2, 0x55, 0x49, 0x0b, 0x4a, 0x0a, 0x2d, 0x39, 0x36, 0x01, 0x6d, 0x80, 0x6d, 0x01, 0xd9, 0x02, 0xe9, 0x6a, 0xa8, 0x05, 0x29, 0x0b, 0x9a, 0x4c, 0xaa, 0x08, 0xb6, 0x08, 0xb4, 0x38, 0x6c, 0x09, 0x54, 0x75, 0xd4, 0x0a, 0xa4, 0x05, 0x45, 0x55, 0x95, 0x0a, 0x9a, 0x04, 0x55, 0x44, 0xb5, 0x04, 0x6a, 0x82, 0x6a, 0x05, 0xd2, 0x0a, 0x92, 0x6a, 0x4a, 0x05, 0x55, 0x0a, 0x2a, 0x4a, 0x5a, 0x02, 0xb5, 0x02, 0x31, 0x69, 0x31, 0x73, 0xa9, 0x0a, 0x4a, 0x05, 0x2d, 0x55, 0x2d, 0x09, 0x5a, 0x01, 0xd5, 0x48, 0xb4, 0x09, 0x68, 0x89, 0x54, 0x0b, 0xa4, 0x0a, 0xa5, 0x6a, 0x95, 0x04, 0xad, 0x08, 0x6a, 0x44, 0xda, 0x04, 0x74, 0x05, 0xb0, 0x25, 0x54, 0x03}; private String getChinesEseterm () {if (get (calendar.date) == get (chinesische_sektional_term)) {Rückgabe -AbschnittAmnames [get (calendern.monate)]; } else if if (get (calendar.date) == get (chinesische_principle_term)) {return PrinciatRetReteMnames [get (calendar.month)]; } sonst return null; } // Hinzufügen von Skywang Private String getLunarfestival () {int Day = get (chinesische_date); int monon = get (chinesische month); String Stoday = Day <10? "0" + Tag: "" + Tag; String smonth = Monat <10? "0"+(Monat): "+(Monat); return lfestival.get (smonth+stoday);} private String getolarFestival () {int tag = get (calendar.date); int monat = get (calendar.month); String stoday = Tag <10? return sfestival.get (smonth+stoday); } private String getFestivalorterordate () {String ret; if ((ret = getolarfestival ())! = null) return ret; if ((ret = getLunarfestival ())! = null) return ret; return getChinese (get (chinesische_term_or_date)); } // Gregorian Festival Private statische Hashmap <String, String> Sfestival = New HashMap <String, String> (); // Mondintervention private statische Hashmap <String, String> lfestival = new HashMap <String, String> (); static {sfestival.put ("0101", "Neujahrstag"); sfestival.put ("0214", "Valenteen Day"); sfestival.put ("0308", "Frauentag"); sfestival.put ("0312", "Arbor Day"); sfestival.put ("0401", "April Tag"); sfestival.put ("0501", "Labor Day"); sfestival.put ("0504", "Jugendtag"); sfestival.put ("0601", "Kindertag"); sfestival.put ("0701", "Centering Day"); sfestival.put ("0801", "Armeetag"); sfestival.put ("0910", "Lehrertag"); sFestival.put("1001","National Day"); sFestival.put("1031","Halloween"); // sFestival.put("1112","Birthday of Sun Yat-sen"); sFestival.put("1225","Christmas"); lFestival.put("0101","Spring Festival"); // lFestival.put("0102","Quan 2"); // lFestival.put("0103","Quan 3"); lFestival.put("0115","Lantern Festival"); lFestival.put("0505","Dragon Boat Festival"); lFestival.put("0707","Qianxi Festival"); lFestival.put("0815","Mid-Autumn Festival"); lFestival.put("0909","Dongyang Festival"); lFestival.put("1208","Laba Festival"); // lFestival.put("1299","New Year's Eve"); } }