Produksi kalender abadi di sini terutama menggunakan kelas kalender dan kelas Gregoriancalendar. Pertama -tama mari kita tinjau dasar -dasarnya:
Bagian Dasar
1. Kelas Kalender.
1. Bidang utama:
YEAR (Year), MONTH (Month starts from 0), DATE (January day), HOUR (indicates the hour in the morning or afternoon), HOUR_F_DAY (indicates the hour in the day.), DAY_OF_WEEK (indicates the number of weeks in the week), DAY_OF_MONTH (indicates the number of weeks in the year), DAY_OF_YEAR (indicates the number of weeks in the year), DAY_OF_WEEK _IN_MONTH (indicates the Jumlah minggu dalam sebulan), Week_of_year (menunjukkan jumlah minggu dalam setahun)
2. Dapatkan objek kelas kalender.
// MELALUI METODE STATIC Getinstance dari Kelas Kalender. Kalender CA = Calendar.getInstance ();
3. Metode utama
void set (bidang int, nilai int) // parameter kelas kalender lapangan, seperti tanggal bulan tahun, dll .... void set (tahun int, bulan int, tanggal int) // set tahun, bulan dan hari. void set (tahun int, bulan int, tanggal int, int jam hari, int menit) // set tahun, bulan, hari, jam, dan menit) // set tahun, bulan, hari, jam, menit, dan settime batal kedua (tanggal tanggal); // mengatur waktu kalender ini dengan tanggal yang diberikan. int get (bidang int) // Mengembalikan nilai bidang kalender yang diberikan. Sebagai contoh: int bulan = acobj.get (calendar.month); tanggal getTime () // Mengembalikan objek tanggal yang mewakili nilai waktu kalender. Long getTimInmillis () // Mengembalikan jumlah milidetik dari tahun 1970.1.1 00:00:00 ke kalender. void add (bidang int, amont); // sesuai dengan aturan kalender, tambahkan atau kurangi jumlah waktu yang ditentukan untuk bidang kalender yang diberikan. Dapat ditambahkan atau dikurangi. Misalnya: caobj.add (calendar.month, 1) bulan depan.
2. Kelas Gregoriancalendar.
1. Dapatkan objek kelas ini
Kalender CA = GregorianCalendar baru () // momen saat ini default. Kalender CA = GregorianCanLendar baru (tahun int, bulan int, int dayofonth) // Awalnya, objek kelas Gregorian dengan tahun, bulan dan hari yang ditentukan. Kalender CA = GregorianCanLendar baru (tahun int, bulan int, int dayofonth, int jam hari, int menit) Objek kelas Gregorian awalnya memiliki tahun, bulan dan hari yang ditentukan. Kalender CA = GregoriancanLendar baru (tahun int, bulan int, int dayofonth, int jam hari, int menit, int kedua) // Awalnya, objek kelas Gregorian dengan tahun, bulan dan hari tertentu. Semua di atas diperoleh dengan mendapatkan lokal default dan objek zona waktu default.
2. Penggunaan penggunaan terutama mewarisi kalender kelas induk.
Bagian contoh
3. Kode Kalender Abadi
Paket com.via.mce.monthcalendar.utils; impor java.util.calendar; impor java.util.date; impor java.util.gregoriancalendar; impor java.util.hashmap;/*** Lunar Calendar. <br> * Simpan ukuran tahun, bulan dan persyaratan matahari sebelumnya antara tahun 1901 dan 2100 dari kalender lunar, dan kemudian menghitung berdasarkan data ini. <br> * <br> * Beberapa bidang atribut konstan untuk kalender lunar telah ditambahkan, dan Anda dapat menggunakan metode get () untuk mendapatkan nilai yang sesuai dari kalender; <br> * Kalender Lunar Tahun, Bulan, dan Hari juga dapat diatur menggunakan metode set ()/add ()/roll (), dan atribut kalender bulan lainnya secara otomatis dihitung; <br> * Selain itu, metode Getchinese (Int Field) juga disediakan untuk mendapatkan teks Cina dari Kalender Lunar (hanya berlaku untuk atribut dan minggu kalender bulan). <br> * <ul> * <li> China_year - Tahun Lunar </li> * <li> China_month - bulan lunar </li> * <li> Chinese_date - Hari Lunar </li> * <li> China_Sectional_term - Solar Tentuan Bulan </li> * <li> China_principle_ven -IST -SULTION dari bulan ini </li> * <li> China_principle_ven -IMPLEAA -BUTH dari bulan </li> * <li> China_principle_ven -angster -qi </li> <li> <li> Chinese_principle_ven -angster Batang surgawi tahun lunar </li> * <li> China_earthly_branch - Cabang duniawi tahun lunar </li> * <li> China_zodiac - Zodiac dari tahun lunar </li> * <li> Cina_term_or_date - jika ada istilah solar pada hari itu, itu menunjukkan sol surya. Kalau tidak, jika hari itu adalah hari pertama hari itu, itu menunjukkan bulan bulan, jika tidak itu menunjukkan hari bulan. * </ul> * Catatan: <br> * Karena pengaturan kelas kalender, bulan Gregorian dimulai dari 0. Semua metode mengikuti konvensi ini. <br> * Tetapi semua atribut bulan dimulai dari 1. Bahkan dalam metode yang disediakan oleh kalender, bulan bulan dimulai dengan 1 dan mewakili bulan lompatan dengan angka negatif. <br> * Metode Clear () akan menyebabkan kalender Lunar dan tanggal kalender Gregorian tidak konsisten atau efek reset yang diharapkan tidak dapat dicapai. Itu harus dihindari sebanyak mungkin. <br> * Saat menggunakan getsimpledateString () untuk mendapatkan string tanggal kalender Gregorian, bulan kalender Gregorian telah diperbaiki; <br> * Saat menggunakan GetSimplechinesEdateString () untuk mendapatkan string tanggal kalender bulan, bulan lompatan bulan diwakili oleh *. <br> * * @Version 0.12 2011-9-5 <br> * <blockquote> Memperbaiki masalah di mana kalender terperangkap dalam siklus mati saat menginisialisasi kalender menggunakan bulan pertama kalender lunar. </BLOCKQUOTE> * @Version 0.11 2009-12-27 <br> * <lockquote> Memperbaiki masalah di mana kalender lunar tidak dihitung saat mendapatkan kalender lunar Cina; <br> * Tambahkan bidang China_term_or_date untuk meniru metode tampilan kalender meja: jika ada istilah matahari pada hari itu, itu menunjukkan istilah matahari, jika itu adalah hari pertama bulan bulan, * jika tidak, ini menunjukkan hari bulan. </blockquote> * @Version 0.10 2009-12-22 */Kelas Akhir Publik Chinesecalendar Memperluas GregorianCalendar {private static final long serialversionuid = 8l; / ** Tahun Lunar*/ Public Static Final Int China_Year = 801; / ** bulan bulan*/ public static final int chinese_month = 802; / ** Hari Lunar*/ Public Static Final Int China_Date = 803; / ** Hari Gregorian yang sesuai dengan jangka waktu matahari bulan ini (istilah matahari sebelumnya)*/ final statis public int Chinese_sectional_term = 804; / ** Hari Gregorian yang sesuai dengan jangka waktu matahari bulan ini (istilah matahari berikutnya)*/ final statis public int chinese_principle_term = 805; / ** batang surgawi*/ final statis publik int statis cina_heavenly_stem = 806; / ** Cabang duniawi*/ final statis publik Int Chinese_Earthly_Branch = 807; / ** tanda zodiak (tanda zodiak)*/ public static int int chines_zodiac = 808; / ** istilah matahari atau hari bulan*/ public static int int chinese_term_or_date = 888; // Tambahkan oleh Skywang/ ** Lunar Festival*/ Public Static Final int lunar_festival = 809; / ** istilah surya*/ public static int int solar_festival = 810; / ** istilah surya*/ public static int chinese_term = 811; / ** Bulan atau Hari Lunar*/ Public Static Final Int China_Month_or_Date = 812; / ** Festival atau istilah matahari atau hari bulan*/ public static int festival_or_term_or_date = 813; Private int Chinayear; private int chinesemonth; // Mulailah dengan 1, angka negatif mewakili bulan lompatan. SectionTters inter privat; // Hari Gregorian Int Principleterm; // Hari Gregorian Boolean pribadi adalah chinesefieldscomputed; // apakah tanggal bulan telah dihitung dan dikonfirmasi boolean swasta aresolartermscomputed; // apakah istilah matahari telah dihitung dan dikonfirmasi boolean swasta terakhir; // adalah pengaturan terakhir dari atribut bulan/** Bangun instance menggunakan waktu saat ini. */ public chinesecalendar () {super (); } /** Bangun instance menggunakan waktu yang ditentukan. */ public chinesecalendar (tanggal d) {super.settime (d); } /** Bangun instance menggunakan waktu yang ditentukan. */ public chinesecalendar (kalender c) {this (c.getTime ()); } /** Bangun instance menggunakan tanggal Gregorian yang ditentukan. */ public chinesecalendar (int y, int m, int d) {super (y, m, d); } /*** Bangun contoh dengan tanggal yang ditentukan. * * @param Ischinese * Apakah itu tanggal bulan * @param y * @param m * @param d */ public chinesecalendar (boolean ischinese, int y, int m, int d) {if (ischinese) {set (cina_year, y); set (cina_month, m); set (cina_date, d); } else {set (y, m, d); }} public void set (bidang int, value int) {computeifNeed (bidang); if (ischinesefield (field)) {// lunar calendar attribute switch (field) {case cina_year: cinayear = value; merusak; case cina_month: chinesemem = nilai; merusak; case cina_date: chinesedate = nilai; merusak; Default: Lempar IllegalArgumentException baru ("Pengaturan Bidang yang Tidak Didukung:" + Field); } lastsetchinese = true; } else {// atribut kalender non-lunar super.set (bidang, nilai); lastsetchinese = false; } areFieldsset = false; arechinesefieldscomputed = false; aresolartermscomputed = false; } public int get (bidang int) {computeifNeed (bidang); if (! ischinesefield (bidang)) {return super.get (bidang); } switch (field) {case cinese_year: return cinayear; case cina_month: return chinesemem; case cina_date: return chinesedate; case cina_sectional_term: return sectionalst; case cina_principle_term: return principleterm; case cinese_heavenly_stem: return (cinayear - 4) % 10 + 1; case cinese_earthly_branch: case cina_zodiac: return (cinayear - 4) % 12 + 1; casing cinese_month_or_date: if (get (cina_date) == 1) {return cinara_month; } else {return cinara_date; } case ipinder_term_or_date: op opsi; if (get (calendar.date) == get (cina_sectional_term)) {option = chines_sectional_term; } lain if (get (calendar.date) == get (cinody_principle_term)) {option = cina_principle_term; } lain jika (get (cina_date) == 1) {option = cina_month; } else {option = cina_date; } opsi pengembalian; Default: Lempar IllegalArgumentException baru ("Lapangan yang Tidak Didukung Dapatkan:" + Field); }} public void add (bidang int, jumlah int) {computeifNeed (bidang); if (! ischinesefield (bidang)) {super.add (bidang, jumlah); lastsetchinese = false; arechinesefieldscomputed = false; aresolartermscomputed = false; kembali; } switch (field) {case cina_year: cinayear += jumlah; merusak; case cinese_month: untuk (int i = 0; i <jumlah; i ++) {chinesemonth = nextChinesemonth (cinayear, chinesemem); if (chinesement == 1) {chieshyear ++; } } merusak; case cina_date: int maxdate = daysinchinesemonth (cinayear, chinesemem); untuk (int i = 0; i <jumlah; i ++) {chinesedate ++; if (chinesedate> maxDate) {chinesedate = 1; chinesemonth = nextchinesemonth (cinayear, chinesemem); if (chinesement == 1) {chieshyear ++; } maxDate = DaysInchinesemonth (ChinaYear, Chinesemem); }} default: lempar IllegalArgumentException baru ("bidang yang tidak didukung:" + bidang); } lastsetchinese = true; areFieldSset = false; arechinesefieldscomputed = false; aresolartermscomputed = false; } public void roll (bidang int, jumlah int) {computeifNeed (bidang); if (! ischinesefield (bidang)) {super.roll (bidang, jumlah); lastsetchinese = false; arechinesefieldscomputed = false; aresolartermscomputed = false; kembali; } switch (field) {case cina_year: cinayear += jumlah; merusak; case cinese_month: untuk (int i = 0; i <jumlah; i ++) {chinesemonth = nextChinesemonth (cinayear, chinesemem); } merusak; case cina_date: int maxdate = daysinchinesemonth (cinayear, chinesemem); untuk (int i = 0; i <jumlah; i ++) {chinesedate ++; if (chinesedate> maxDate) {chinesedate = 1; }} default: lempar IllegalArgumentException baru ("bidang yang tidak didukung:" + bidang); } lastsetchinese = true; areFieldSset = false; arechinesefieldscomputed = false; aresolartermscomputed = false; } /*** Dapatkan bahasa Cina dari atribut, bidang atribut yang dapat digunakan adalah day_of_week dan semua bidang atribut bulan. * * @param field * @return */ public string getchinese (bidang int) {computeIfNeed (bidang); switch (field) {case cinese_year: return getchinese (cina_heavenly_stem) + getchinese (cina_earthly_branch) + "tahun"; case cinese_month: if (chinesemonth> 0) return chinesemonthnames [chinesemonth] + "month"; lain mengembalikan "lompatan" + chinesemonthnames [-chinesemonth] + "bulan"; case cina_date: return chinesedateNames [chinesedate]; case ipinder_sectional_term: return sectiontermNames [get (calendar.month)]; case ipinder_principle_term: return principletermNames [get (calendar.month)]; case ipinder_heavenly_stem: return stemname [get (field)]; case cinody_earthly_branch: return branchnames [get (field)]; case cina_zodiac: kembalikan nama hewan [get (field)]; case calendar.day_of_week: return chineseweeknames [get (field)]; case cinese_term_or_date: return getchinese (get (cina_term_or_date)); case lunar_festival: return getLunarFestival (); case solar_festival: return getSolarFestival (); case festival_or_term_or_date: return getFestivalerTerMordate (); // todo check case cina_month_or_date: return getchinese (get (cina_month_or_date)); case cina_term: return getchineseterm (); Default: Lempar IllegalArgumentException baru ("Lapangan Tanpa Didukung Get:" + Field); }} String publik getSimpleGregorIandateString () {return new StringBuffer (). append (get (tahun)). append ("-") .append (get (bulan) + 1) .append ("-"). append (get (date)) .toString (); } Public String getSimplechinesedateString () {return new StringBuffer () .Perpend (get (cinese_year)) .append ("-") .PINPEND (get (Chines_month)> 0? "" Get (Chines_month): "*" + (get (cina_month))). Apend ("-"). " } public String getchinesedateString () {return new StringBuffer (). append (getchinese (cinese_year)). lapehkan (getchinese (cina_month)). lapisan (getchinese (cina_date)). tostring (); } public String toString () {StringBuffer buf = new StringBuffer (); Buf.Append (getSimpleGregoriandateString ()). append ("|") .Perampingkan (getchinese (day_of_week)). append ("| [Kalender lunar]"). Laporan (getchinesedateString ()). Append ("") .Posisi (Getchinese (China_zodiac ()). .Perampingkan (get (cina_sectional_term)). append ("day") .Perampingkan (getchinese (cina_sectional_term)). append ("") .Perampingkan (get (Chinese_principle_term)). Append ("Day") .PINDAK (getchinese (cina_principle_term)); return buf.tostring (); } / ** * Tentukan apakah itu atribut bulan * * @param field * @return * / private boolean ischinesefield (int field) {switch (field) {case cina_year: case cina_month: case cina_date: case cina_sectional_term: case cina_princle_terter China_term_or_date: case cinody_month_or_date: return true; Default: return false; }} / ** * Tentukan apakah itu adalah atribut yang terkait dengan istilah surya * * @param field * @return * / private boolean ischinesetermsfield (bidang int) {switch (bidang) {case cina_sectional_term: case cina_principle_term: case cina_or_or_date: return true; Default: return false; }} /** * Jika atribut yang ditetapkan terakhir kali tidak sama dengan yang akan ditetapkan atau diperoleh kali ini (Kalender Lunar /Kalender Gregorian), <br> * Misalnya, terakhir kali saya menetapkan Kalender Lunar yang dibutuhkan Kalender yang sebelumnya, Calendar, Lunar yang dibutuhkan Gregoria, <br>. tanggal. * * @param Field */ private void computeIfNeed (bidang int) {if (isChinesEfield (bidang)) {if (! lastSetchinese &&! arechinesefieldscomputed) {super.complete (); ComputechinesEfields (); areFieldSset = true; arechinesefieldscomputed = true; aresolartermscomputed = false; } if (ischinesetermsfield (bidang) &&! aresolartermscomputed) {computeSolarTerMs (); aresolartermscomputed = true; }} else {if (lastsetchinese &&! arefieldsset) {computegregorianFields (); super.complete (); areFieldSset = true; arechinesefieldscomputed = true; aresolartermscomputed = false; }}} / *** Gunakan tanggal bulan untuk menghitung gregoriandate* / private void computegregorianfields () {int y = cinayear; int m = chinesemem; int d = chinesedate; arechinesefieldscomputed = true; areFieldSset = true; lastsetchinese = false; // Sesuaikan kisaran tanggal jika (y <1900) y = 1899; lain jika (y> 2100) y = 2101; if (m <-12) m = -12; lain jika (m> 12) m = 12; if (d <1) d = 1; lain jika (d> 30) d = 30; int dateint = y * 10000 + math.abs (m) * 100 + d; if (dateint <19001111) {// set terlalu kecil (1901, calendar.january, 1); super.complete (); } lain jika (dateint> 21001201) {// set terlalu besar (2100, calendar.december, 31); super.complete (); } else {if (math.abs (m)> 12) {m = 12; } int days = chinesecalendar.daysinchinesemonth (y, m); if (days == 0) {m = -m; hari = chinesecalendar.daysinchinesemonth (y, m); } if (d> days) {d = days; } set (y, math.abs (m) - 1, d); ComputechinesEfields (); jumlah int = 0; while (chieshyear! = y || chinesemonth! = m) {jumlah += daysinchinesemonth (cinayear, chinesemem); chinesemonth = nextchinesemonth (cinayear, chinesemem); if (chinesement == 1) {chieshyear ++; }} jumlah += d - chinesedate; super.add (calendar.date, jumlah); } computechinesEfields (); } / *** Hitung tanggal kalender lunar menggunakan tanggal Gregorian* / private void computechinesefields () {int gregorianyear = internalget (calendar.year); int gregorianmonth = internalget (calendar.month) + 1; int gregoriandate = internalget (calendar.date); if (gregorianyear <1901 || gregorianyear> 2100) {return; } int startyear, startmonth, startDate; if (gregorianyear <2000) {startyear = baseeyear; Startmonth = Basemem; startDate = berdasarkan; ChinaYear = Basechineseyear; chinesemonth = basechinesemonth; chinesedate = basechinesedate; } else {// Hari yang sesuai kedua digunakan untuk meningkatkan efisiensi komputasi // 1 Januari 2000, Kalender Lunar yang sesuai 4697 (1999), Startyear = BaseYear + 99; Mulai Bahan = 1; startDate = 1; ChinaYear = Basechineseyear + 99; Chinesemonth = 11; chinesedate = 25; } int daysdiff = 0; // tahun untuk (int i = startyear; i <gregorianyear; i ++) {if (isgregorianleapyear (i)) {daysDiff+= 366; // lompatan tahun} else {DaysDiff += 365; }} // bulan untuk (int i = startmonth; i <gregorianmonth; i ++) {daysDiff+= Daysingregorianmonth (Gregorianyear, i - 1); } // daydaysdiff += gregoriandate - startDate; chinesedate += daysdiff; int lastDate = DaysInchinesemonth (ChinaYear, Chinesemem); while (chinesedate> lastDate) {chinesedate -= lastDate; chinesemonth = nextchinesemonth (cinayear, chinesemem); if (chinesement == 1) {chieshyear ++; } LastDate = DaysInchinesemonth (ChinaYear, Chinesemem); }} / *** Hitung istilah surya* / private void computeSolarterMS () {int gregorianyear = internalget (calendar.year); int gregorianmonth = internalget (calendar.month); if (gregorianyear <1901 || gregorianyear> 2100) {return; } sectionalme = sectionalme (gregorianyear, gregorianmonth); principleterm = principalterM (Gregorianyear, Gregorianmonth); } / * Berikutnya adalah metode statis ~ * / / ** * Apakah ini tahun kabisat di tahun Gregorian * * @param tahun * @return * / public static isgregorianleapyear (tahun int) {boolean isleap = false; if (tahun % 4 == 0) {isleap = true; } if (tahun % 100 == 0) {isleap = false; } if (tahun % 400 == 0) {isleap = true; } return Isleap; } /*** Hitung jumlah hari di tahun Gregorian, dan bulan Gregorian dimulai dari 0! * * @param y * @param m * @return */ public int daysingregorianth (int y, int m) {int d = daysingregorianmonth [m]; if (m == calendar.february && isgregorianleapyear (y)) {d ++; // Satu hari lagi dalam tahun lompatan di tahun Gregorian} kembali D; } /*** Hitung syarat matahari bulan Gregorian, bulan Gregorian dimulai dari 0! * * @param y * @param m * @return */ public static int sectionalst (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseeyear + 1; while (ry> = sectionaltermyear [m - 1] [index]) {index ++; } int ist = sectionaltermmap [m - 1] [4 * indeks + ry % 4]; if ((ry == 121) && (m == 4)) {term = 5; } if ((ry == 132) && (m == 4)) {term = 5; } if ((ry == 194) && (m == 6)) {term = 6; } istilah pengembalian; } /*** Hitung zhongqi tahun Gregorian, dan bulan Gregorian dimulai dari 0! * * @param y * @param m * @return */ public static int principleterm (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseeyear + 1; while (ry> = principleterMyear [m - 1] [index]) {index ++; } int ist = principaltermmap [m - 1] [4 * indeks + ry % 4]; if ((ry == 171) && (m == 3)) {term = 21; } if ((ry == 181) && (m == 5)) {term = 21; } istilah pengembalian; } / ** * Hitung jumlah hari di tahun bulan * * @param y * @param m * @return * / public static int DaysInchinesemonth (int y, int m) {// Catatan: Bulan lompatan m <0 int index = y - Basechineseyear + baseIndex; int v = 0; int l = 0; int d = 30; if (1 <= m && m <= 8) {v = chinesemems [2 * index]; l = m - 1; if (((v >> l) & 0x01) == 1) {d = 29; }} lain jika (9 <= m && m <= 12) {v = chinesemems [2 * index + 1]; l = m - 9; if (((v >> l) & 0x01) == 1) {d = 29; }} else {v = chinesemems [2 * index + 1]; v = (v >> 4) & 0x0f; if (v! = math.abs (m)) {d = 0; } else {d = 29; untuk (int i = 0; i <bigleapmonthyears.length; i ++) {if (bigleapmonthyears [i] == index) {d = 30; merusak; }}}} return d; } / ** * Hitung bulan berikutnya dari kalender lunar * * @param y * @param m * @return * / public static int nextChinesemonth (int y, int m) {int n = math.abs (m) + 1; if (m> 0) {int index = y - basechineseyear + baseIndex; int v = chinesememt [2 * index + 1]; v = (v >> 4) & 0x0f; if (v == m) {n = -m; }} if (n == 13) {n = 1; } return n; } /* Tanggal hari pertama kalender* / private static final int baseyear = 1901; private static final int basemonth = 1; Private static final int berdasarkan = 1; private static final int baseindex = 0; private static final int basechineseyear = 1900; private static final int basechinesemonth = 11; Basechinesedate int statis privat = 11; /* String Cina*/ string final statis pribadi [] chineseweeknames = {"", "Minggu", "Senin", "Selasa", "Kamis", "Jumat", "Sabtu"}; string final statis pribadi [] chinesemonthnames = {"", "pertama", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan", "sepuluh", "sepuluh", "sebelas", "dua belas"}; private static final String[] chineseDateNames = { "", "First", "First", "Fourth", "Five", "Sixth", "Seventh", "Eighth", "Nine", "Nine", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Kesepuluh", "kesepuluh", "kesepuluh", "kesepuluh", "kesepuluh", "kesepuluh", "kesepuluh", "kesepuluh", "kesepuluh"}; 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 Static Final String [] sectiontermNames = {"Little Cold", "Bird Spring", "Jingzhe", "Qingming", "Beginning of Summer", "Biji Graining", "Little Heat", "Bird Autumn", "White Dew", "Cold Dew", "Breaking Winter", "High Snow"}; string final statis pribadi [] stemnames = {"", "jia", "yi", "bing", "ding", "wu", "ji", "geng", "xin", "ren", "gui"}; Private Static Final String [] BranchNames = {"", "Zi", "Ug", "Yin", "Mao", "Chen", "Si", "Wu", "Shen", "You", "Xu", "Hai"}; string akhir statis pribadi [] animalNames = {"", "tikus", "ox", "harimau", "kelinci", "naga", "ular", "kuda", "domba", "monyet", "ayam", "anjing", "babi"}; / * Berikutnya adalah Tabel Kompresi Data ~ */ private static final 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. 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7}, {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}}; 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, 201, 201, 250, 250, 250, 250, 126, 250, 126, 250, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 258, 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, 52, 53, 16, 12, 192, 201, 201, 250}, {17, 53, 53, 162, 12, 201, 201, 201, 201, 250, Private static final char [] [] principleterMmap = {{21, 21, 21, 21, 21, 20, 21, 21, 21, 20, 20, 21, 21, 20, 20, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 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, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 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, 24, 24, 24, 23, 23, 24, 23, 24, 24, 24, 24, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23. 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, 88, 88, 182, 188, 200, 201}, {21, 49, 49, 49, 88, 188, 188, 200, {21, 49, 88, 120, 188, {21, 88, 120, 120, {21, 120, 49, 201}, {28, 60, 88, 116, 148, 180, 200, 201}, {25, 53, 84, 112, 144, 172, 200, 201}, {29, 57, 89, 120, 148, 200, 200, 201}, {17, 45, 73, 73, 108, 108, 200, {17, 45, 73, 108, 200, 124, 160, 192, 200, 201}, {16, 44, 80, 112, 148, 180, 200, 201}, {17, 53, 88, 120, 156, 188, 200, 201}}; private static final char [] Daysingregorianmonth = {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, 0x4a, 0x2a, 0x56, 0x02, 0x6d, 0x4a 0x02, 0xd2, 0x52, 0xa9, 0x05, 0x49, 0x0d, 0x2a, 0x45, 0x2b, 0x09, 0x56, 0x01, 0xb5, 0x20, 0x6d, 0x01, 0x59, 0x69, 0x20, 0x6d, 0x01, 0x59, 0x69, 0x20 0xa9, 0x56, 0xa5, 0x04, 0x2b, 0x09, 0x9e, 0x38, 0xb6, 0x08, 0xec, 0x74, 0x6c, 0x05, 0xd4, 0x0a, 0xe4, 0x6a, 0x52, 0xd4, 0x0a, 0xe4, 0x6a, 0x52, 0x52, 0x05, 0x05, 0xe4, 0x6a, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x0 0x42, 0x5b, 0x04, 0xb6, 0x04, 0xb4, 0x22, 0x6a, 0x05, 0x52, 0x75, 0xc9, 0x0a, 0x52, 0x05, 0x35, 0x55, 0x4d, 0x0a, 0x05, 0x35, 0x55, 0x4d, 0x0a, 0x05, 0x35, 0x55, 0x4d, 0x0A, 0x05, 0x35, 0x55, 0x4d, 0x0a, 0x0a, 0x0a, 0x35, 0x55, 0x4d, 0x0a, 0x0a, 0x0a yang ” 0xb5, 0x02, 0x6a, 0x8a, 0x68, 0x05, 0xa9, 0x0a, 0x8a, 0x6a, 0x2a, 0x05, 0x2d, 0x09, 0xaa, 0x48, 0x5a, 0x01, 0xb5, 0xaa, 0x48, 0x5a, 0x01, 0xb5, 0xb5, 0x09 0x05, 0x25, 0x75, 0x95, 0x0a, 0x96, 0x04, 0x4d, 0x54, 0xad, 0x04, 0xda, 0x04, 0xd4, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x85, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x85, 0X85, 0X85, 0X85, 0X85, 0X85, 0X85, 0 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, 0x05, 0xd2, 0x0a, 0xa2, 0x4a, 0x05, 0xd2, 0x0a, 0xa2, 0x4a, 0x05, 0xD2, 0x0a, 0xa2, 0x4a, 0x05 0x2d, 0x0a, 0x5a, 0x02, 0x75, 0x61, 0xb5, 0x02, 0x6a, 0x03, 0x61, 0x45, 0xa9, 0x0a, 0x4a, 0x05, 0x25, 0x2d, 0x09, 0x4a, 0x05, 0x25, 0x2d, 0x09, 0x4a, 0x05, 0x25, 0x2d, 0x09, 0x4a, 0x05, 0x25, 0x2d, 0x09, 0x4a, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x0 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, 0xaa, 0x05, 0xb2, 0x55, 0x49, 0xaa, 0x05, 0xb2, 0x55, 0x49, 0xaa, 0x05, 0xb2, 0x55, 0x49, 0xaa, 0x05, 0xb2, 0x55, 0x49, 0xaa 0x39, 0x36, 0x01, 0x6d, 0x80, 0x6d, 0x01, 0xd9, 0x02, 0xe9, 0x6a, 0xa8, 0x05, 0x29, 0x0b, 0x9a, 0x4c, 0xaa, 0x08, 0x0b, 0x9a, 0x4c, 0xaa, 0x08, 0x0b, 0x9a, 0x4c, 0xaa, 0x08, 0x0b 0x6c, 0x09, 0x54, 0x75, 0xd4, 0x0a, 0xa4, 0x05, 0x45, 0x55, 0x95, 0x0a, 0x9a, 0x04, 0x55, 0x44, 0xb5, 0x04, 0x6a, 0x55, 0x44, 0xb5, 0x04, 0x6a, 0x55, 0x44, 0xb5, 0x04, 0x6a, 0x55, 0x44, 0xb5, 0x04, 0x6a, 0x55, 0x82 0x0a, 0x92, 0x6a, 0x4a, 0x05, 0x55, 0x0a, 0x2a, 0x4a, 0x5a, 0x02, 0xb5, 0x02, 0x31, 0x69, 0x31, 0x73, 0xa9, 0x0a, 0x69, 0x31, 0x73, 0xa9, 0x0a, 0x69, 0x31, 0x73, 0xa9, 0x0a, 0x69, 0x31, 0x73, 0xa9, 0x0a, 0x69 0x2d, 0x09, 0x5a, 0x01, 0xd5, 0x48, 0xb4, 0x09, 0x68, 0x89, 0x54, 0x0b, 0xa4, 0x0a, 0xa5, 0x6a, 0x95, 0x04, 0xad, 0xa5, 0x6a, 0x95, 0x04, 0xad, 0xa5, 0x6, 0x6a, 0x95, 0x04, 0xad, 0xa5, 0xa5, 0x6a, 0x95, 0x04, 0xaD, 0xa5, 0x6a, 0x6a, 0x9, 0x04, 0xa, 0xa5, 0x6a, 0x95 yang ” 0x04, 0x74, 0x05, 0xb0, 0x25, 0x54, 0x03}; Private String getChineseterm () {if (get (calendar.date) == get (cina_sectional_term)) {return sectionaltermNames [get (calendar.month)]; } lain if (get (calendar.date) == get (cinody_principle_term)) {return principLeMnames [get (calendar.month)]; } lain return null; } // Tambahkan oleh Skywang Private String getLunarFestival () {int day = get (cina_date); int bulan = get (cina_month); String stoday = day <10? "0" + hari: "" + hari; String smonth = bulan <10? "0"+(bulan): "+(bulan); return lfestival.get (smonth+stoday);} string pribadi getSololarFestival () {int day = get (calendar.date); int month = get (calendar.month); string stoday = day <10?" 0 "+hari:" ""+bulan); "Bulan); return sFestival.get (Smonth+Stoday); } private string getFestivalerTerMordate () {string ret; if ((ret = getSolarFestival ())! = null) return ret; if ((ret = getLunarFestival ())! = null) return ret; return getchinese (get (cina_term_or_date)); } // Gregorian Festival Private Static HashMap <String, String> sFestival = new HashMap <String, String> (); // lunar intervensi private static hashMap <string, string> lfestival = new HashMap <string, string> (); static {sFestival.put ("0101", "New Year's Day"); sfestival.put ("0214", "Valenteen Day"); sfestival.put ("0308", "Hari Wanita"); sfestival.put ("0312", "Hari Arbor"); sfestival.put ("0401", "Hari April"); sfestival.put ("0501", "Hari Buruh"); sfestival.put ("0504", "hari pemuda"); sfestival.put ("0601", "Hari Anak"); sfestival.put ("0701", "Hari Pusat"); sfestival.put ("0801", "Hari Angkatan Darat"); sfestival.put ("0910", "Hari Guru"); sfestival.put ("1001", "Hari Nasional"); 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"); }}