Производство вечного календаря здесь в основном использует класс календаря и класс GregorianCalendar. Давайте сначала рассмотрим основы:
Основные части
1. Класс календаря.
1. Основные поля:
Год (год), месяц (месяц начинается с 0), дату (январь -день), час (указывает на час утром или днем), deh_f_day (указывает на час дня.), Day_of_week (указывает количество недель в неделе), Day_of_month (указывает на количество недель в год), Day_OF_YEAR (указывает на число недель в год), Day, Day_FEEL_IN_IN_IN_ -LEN_IN_IN_ -LEMELEST_IN_IN_ -LEN_IN Количество недель в месяце), Week_of_year (указывает количество недель в году)
2. Получить объект класса календаря.
// пройти статический метод получить класс календаря. Календарь ca = календарь.getinstance ();
3. Основные методы
void set (int field, int value) // Параметры класса полевого календаря, такие как дата года года и т. Д. void set (int Year, int Month, Date Date, int Hourpday, Int Miname) // Установка Год, месяц, день, час и минута) // Установка Год, месяц, день, час, минута и второе место в сборе (дата даты); // Установить время этого календаря с данной датой. int get (int field) // Возвращает значение данного поля календаря. Например: int month = acobj.get (calendar.month); date gettime () // Возвращает объект даты, представляющий значение времени календаря. Long GetTimeInmillis () // Возвращает количество миллисекундов с 1970.1.1.1 00:00:00 в календарь. void add (int field, amont); // Согласно правилам календаря, добавьте или вычитайте указанное количество времени для данного поля календаря. Может быть добавлен или вычтен. Например: caobj.add (calendar.month, 1) в следующем месяце.
2. Класс Грегорианкалендар.
1. Получить этот объект класса
Календарь CA = новый gregorianCalendar () // Текущий момент по умолчанию. Календарь CA = новый GregorianCanlendar (int Year, int Month, int Dayofmonth) // Первоначально объект класса Gregorian с указанным годом, месяцем и днем. Календарь CA = новый gregorianCanlendar (int Year, int Month, int dayofmonth, int hourpday, int miname). Грегорианский объект класса изначально имеет указанный год, месяц и день. Календарь CA = новый GregorianCanlendar (int Year, int Month, int dayofmonth, int hourday, int miname, int second) // Первоначально, григорианский объект класса с указанным годом, месяцем и днем. Выше всего получается путем получения объектов Locale по умолчанию и по умолчанию.
2. Использование использования в основном наследует календарь родительского класса.
Пример раздела
3. Код вечного календаря
пакет com.via.mce.monthcalendar.utils; import java.util.calendar; импорт java.util.date; импорт java.util.gregoriancalendar; импорт java.util.hashmap;/*** Лунный календарь. <br> * Сохраните размер года, месяца и предыдущих солнечных терминов между 1901 и 2100 гг. Лунного календаря, а затем рассчитайте на основе этих данных. <br> * <br> * было добавлено несколько постоянных полей атрибутов для лунного календаря, и вы можете использовать метод get () для получения соответствующего значения календаря; <br> * Лунный календарный год, месяц и день также можно установить с помощью метода set ()/add ()/roll (), а другие атрибуты лунного календаря вычисляются автоматически; <br> * Кроме того, метод GetChinese (Int Field) также предоставляется для получения китайского текста лунного календаря (только применимо к атрибутам лунного календаря и недели). <br> * <ul> * <li> cilina_year - Лунный год </li> * <li> cilina_month - Лунный месяц </li> * <li> cilina_date - Лунный день </li> * <li> Китайский из лунного года </li> * <li> cilina_earthly_branch - Земные ветви лунного года </li> * <li> cilina_zodiac - Зодиак лунного года </li> * <li> cilina_term_or_date - если есть солнечный термин в день, это указывает на солнечный термин. В противном случае, если день - первый день дня, это указывает на лунный месяц, в противном случае это указывает на лунный день. * </ul> * Примечание: <br> * Из -за настройки класса календаря григорианский месяц начинается с 0. Все методы следуют этому соглашению. <br> * Но все лунные атрибуты начинаются с 1. Даже в методе, предоставленном календарем, лунный месяц начинается с 1 и представляет шаг на месяц с отрицательным числом. <br> * Метод CLEAR () вызовет лунный календарь, а григорианский календарь датируется непоследовательным или ожидаемым эффектом сброса не может быть достигнут. Следует избегать как можно больше. <br> * При использовании getSiMpledAtestring () для получения григорианской строки даты календаря григорианский календарный месяц был исправлен; <br> * При использовании getSiMplechinesedatestring () для получения строки даты лунного календаря лунный шаг месяц представлен *. <br> * * @version 0.12 2011-9-5 <br> * <Blockquote> Исправлена проблема, в которой календарь был пойман в мертвом цикле при инициализации календаря с использованием первого месяца лунного календаря. </blockquote> * @version 0.11 2009-12-27 <br> * <Blockquote> Исправлен вопрос, где лунный календарь не был рассчитан при получении китайского лунного календаря; <br> * Добавьте поле winking_term_or_date, чтобы имитировать метод отображения календаря настольного календаря: если в этот день есть солнечный термин, это указывает на солнечный термин, если это первый день лунного месяца, * в противном случае это указывает на лунный день. </blockquote> * @version 0,10 2009-12-22 */public final Class Chinesecalendar Extends gregoriancalendar {private Static Final Long Serialversionuid = 8L; / ** Лунный год*/ public static final int int cilina_year = 801; / ** Лунный месяц*/ public static final int int intring_month = 802; / ** Лунный день*/ public static final int int intring_date = 803; / ** Григорианский день, соответствующий солнечному термину месяца (предыдущий солнечный термин)*/ public static final int cilina_sectional_term = 804; / ** Грегорианский день, соответствующий солнечному термину месяца (следующий солнечный термин)*/ public static final int int intair_principle_termer = 805; / ** Небесные стебли*/ public static final int int cilina_heavenly_stem = 806; / ** Земные ветви*/ public static final int int intishly_earthly_branch = 807; / ** Знаки зодиака (знаки зодиака)*/ public static final int int intbily_zodiac = 808; / ** Солнечный термин или лунный день*/ public static final int int witchin_mer_or_date = 888; // Добавить Skywang/ ** Lunar Festival*/ public Static Final int lunar_festival = 809; / ** Солнечный термин*/ public static final int solar_festival = 810; / ** Солнечный термин*/ public static final int int cilina_term = 811; / ** месяц или лунный день*/ public static final int int witina_month_or_date = 812; / ** Фестиваль или солнечный термин или лунный день*/ public Static Final Festival_or_erm_or_date = 813; частный int intringyear; Частный int chinesemonth; // Начнем с 1, отрицательные числа представляют собой шаг на перейтичный месяц Private Int Chinesedate; частный раздел Int; // Грегорианский день частного принципала INT; // Грегорианский день частного логического подразделения китайский // была ли лунная дата рассчитана и подтверждена частная логическая арезолартерскомпьютированная; // был ли солнечный термин рассчитан и подтвержден частный логический // - последняя настройка лунного атрибута/** Создание экземпляра, используя текущее время. */ public chinesecalendar () {super (); } /** Построить экземпляр, используя указанное время. */ public chinesecalendar (date d) {super.settime (d); } /** Построить экземпляр, используя указанное время. */ public chinesecalendar (календарь c) {this (c.gettime ()); } /** Построить экземпляр, используя указанную григорианскую дату. */ public chinesecalendar (int y, int m, int d) {super (y, m, d); } /*** Создайте экземпляр с указанной датой. * * @param ishinese * Это лунная дата * @param y * @param m * @param d */ public chinesecalendar (логический ишинь, int y, int m, int d) {if (ishinese) {set (cilina_year, y); SET (cilina_month, m); set (cilina_date, d); } else {set (y, m, d); }} public void set (int field, int value) {computeifneed (field); if (ischinesefield (field)) {// Lunar Calendar Switch (Field) {case witina_year: cilinayear = value; перерыв; case winking_month: chinesemonth = value; перерыв; case winking_date: chinesedate = value; перерыв; по умолчанию: бросьте новое allosalargumentException («Неподдерживаемые настройки поля:« + поле); } lastsetchinese = true; } else {// не-Лунарный Календарь атрибут super.set (field, value); Lastsetchinese = false; } areFieldsSet = false; arechinesefieldscomputed = false; aresolartermscomputed = false; } public int get (int field) {computeifneed (field); if (! Ischinesefield (Field)) {return super.get (field); } switch (field) {case witina_year: return winkingyear; case winking_month: return chinesemonth; case winking_date: return chinesedate; case witina_sectional_term: return sector -trem; case winking_principle_term: return proniterm; case winking_heavenly_stem: return (winkingyear - 4) % 10 + 1; case witina_earthly_branch: case witina_zodiac: return (cilinayear - 4) % 12 + 1; case witina_month_or_date: if (get (cilina_date) == 1) {return winking_month; } else {return winking_date; } case winking_term_or_date: int option; if (get (calendar.date) == get (cilina_sectional_term)) {option = cilina_sectional_termer; } else if (get (calendar.date) == get (cilina_principle_term)) {option = cilina_principle_termer; } else if (get (cilina_date) == 1) {option = cilina_month; } else {option = cilina_date; } ortout Option; по умолчанию: бросьте новое allogalargumentException («Неподдерживаемое поле get:» + field); }} public void add (int field, int sumber) {computeifneed (field); if (! Ischinesefield (Field)) {Super.Add (Field, Summ); Lastsetchinese = false; arechinesefieldscomputed = false; aresolartermscomputed = false; возвращаться; } switch (field) {case witina_year: winkingyear += summ; перерыв; case winking_month: for (int i = 0; i <сумма; i ++) {chinesemonth = nextchinesemonth (китайский, Chinesemonth); if (chinesemonth == 1) {cinkyyear ++; } } перерыв; case winking_date: int maxdate = daysinchinesemonth (winkyyear, chinesemonth); for (int i = 0; i <summ; i ++) {chinesedate ++; if (chinesedate> maxdate) {chinesedate = 1; Chinesemonth = nextchinesemonth (китайский, Chinesemonth); if (chinesemonth == 1) {cinkyyear ++; } maxDate = DaysInchinesemonth (китайский, Chinesemonth); }} по умолчанию: бросьте новую allosalargumentException ("Неподдерживаемое поле:" + field); } lastsetchinese = true; artifieldsset = false; arechinesefieldscomputed = false; aresolartermscomputed = false; } public void roll (int field, int sumber) {computeifneed (field); if (! Ischinesefield (Field)) {super.roll (Field, Summ); Lastsetchinese = false; arechinesefieldscomputed = false; aresolartermscomputed = false; возвращаться; } switch (field) {case witina_year: winkingyear += summ; перерыв; case winking_month: for (int i = 0; i <сумма; i ++) {chinesemonth = nextchinesemonth (китайский, Chinesemonth); } перерыв; case winking_date: int maxdate = daysinchinesemonth (winkyyear, chinesemonth); for (int i = 0; i <summ; i ++) {chinesedate ++; if (chinesedate> maxdate) {chinesedate = 1; }} по умолчанию: бросьте новую allosalargumentException ("Неподдерживаемое поле:" + field); } lastsetchinese = true; artifieldsset = false; arechinesefieldscomputed = false; aresolartermscomputed = false; } /*** Получите китайский язык атрибута, поля атрибута, которые можно использовать, - это Day_of_week и все поля лунного атрибута. * * @param field * @return */ public String getChinese (int field) {computeifneed (field); Switch (Field) {case witina_year: return getChinese (cilina_heavenly_stem) + getChinese (cilina_earthly_branch) + "Год"; case winking_month: if (chinesemonth> 0) return chinesemonthnames [chinesemonth] + "месяц"; иначе вернуть "прыжок" + chinesemonthnames [-chinesemonth] + "месяц"; case winking_date: вернуть chinesedateNames [chinesedate]; case witina_sectional_term: return sectormtromnames [get (calendar.month)]; case winking_principle_term: return incordsteermNames [get (calendar.month)]; case winking_heavenly_stem: return stemnames [get (field)]; case winking_earthly_branch: return branchnames [get (field)]; case witina_zodiac: возвращайте животные [get (field)]; Case Calendar.DAY_OF_WEEK: вернуть китайские weekeknames [get (field)]; case witina_term_or_date: return getChinese (get (cilina_term_or_date)); case lunar_festival: return getlunarfestival (); case solar_festival: return getsolarfestival (); case festival_or_term_or_date: return getFestivalorTermord (); // todo проверить Case case witinad_month_or_date: вернуть getChinese (get (cilina_month_or_date)); case witina_term: return getChineseterm (); по умолчанию: бросьте новое allogalargumentException («Неподдерживаемое поле китайцы Get:« + Field); }} public String getSiMpleGrianDatestring () {return new stringBuffer (). Append (get (Год)). Append ("-") .append (get (месяц) + 1) .append ("-"). Append (get (date)) .toString (); } public String getSiMplechinesEdatestring () {return new stringbuffer () .append (get (cilina_year)) .append ("-") .append (get (cilina_month)> 0? } public String getChinesedAtestring () {return new stringBuffer (). Append (getChinese (cilina_year)) .append (getChinese (cilina_month)) .append (getChinese (cilina_date)). toString (); } public String toString () {StringBuffer buf = new StringBuffer (); buf.append (getsimplegregoriandatestring ()). Append ("|") .append (getChinese (day_of_week)). Append ("| [Лунный календарь]") .ppend (getchinesedatestring ()). Приложение ("") .append (getchinese (chinable_zodiac)). .Append (get (cilina_sectional_term)). Append ("day") .append (getChinese (cilina_sectional_term)). Append ("") .append (get (cilina_principle_term)). Append ("day") .append (getchinese (cilina_principle_term)); return buf.tostring (); } / ** * Определите, является ли это лунным атрибутом * * @param field * @return * / private boolean ischinesefield (int field) {switch (field) {case case witring_year: case witinad_month: case winking_date: case winking_sectional_merm: case winly_principle_3 Winking_term_or_date: case winking_month_or_date: return true; по умолчанию: вернуть false; }} / ** * Определите, является ли это атрибутом, связанным с солнечным термином * * @param field * @return * / private boolean ischinesetermsfield (int field) {switch (field) {case witring_sectional_term: case witina_principle_termer: case witinad_mer_date: return true; по умолчанию: вернуть false; }} /** * Если атрибуты, которые были установлены в прошлый раз, не такие, как те, которые должны быть установлены или получены на это время (лунный календарь /григорианский календарь), <br> * Например, в последний раз, когда я установил, это был лунный календарь, и теперь я хочу установить или получить григорийский календарь, <brbr> * Вы нуждаетесь в расчете на календарный календарный календарь. * * @param field */ private void computeifneed (int field) {if (ischinesefield (field)) {if (! lastsetchinese &&! arechinesefieldscomputed) {super.complete (); Computechinesefields (); artifieldsset = true; arechinesefieldscomputed = true; aresolartermscomputed = false; } if (ishinesetermsfield (field) &&! aresolartermscomputed) {computesolarterms (); aresolartermscomputed = true; }} else {if (lastsetchinese &&! arefieldsset) {computegroorianfields (); super.complete (); artifieldsset = true; arechinesefieldscomputed = true; aresolartermscomputed = false; }}} / *** Используйте лунную дату, чтобы вычислять григориандат* / private void computegrogianfields () {int y = cilinayear; int m = Chinesemonth; int d = Chinesedate; arechinesefieldscomputed = true; artifieldsset = true; Lastsetchinese = false; // Регулируйте диапазон дат, если (y <1900) y = 1899; иначе if (y> 2100) y = 2101; if (m <-12) m = -12; иначе if (m> 12) m = 12; if (d <1) d = 1; иначе if (d> 30) d = 30; int dateint = y * 10000 + math.abs (m) * 100 + d; if (dateint <19001111) {// Слишком маленький набор (1901, календарь. January, 1); super.complete (); } else if (dateint> 21001201) {// Слишком большой набор (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; Дни = chinesecalendar.daysinchinesemonth (y, m); } if (d> дней) {d = Days; } set (y, math.abs (m) - 1, d); Computechinesefields (); int out = 0; while (китайский завод! Chinesemonth = nextchinesemonth (китайский, Chinesemonth); if (chinesemonth == 1) {cinkyyear ++; }} сумма += D - Chinesedate; super.add (calendar.date, сумма); } computechinesefields (); } / *** Рассчитайте дату лунного календаря, используя григорианскую дату* / 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 = baseyear; startMonth = basemonth; startDate = основан; Китайский завод = базехинесейр; Chinesemonth = basechinesemonth; chinesedate = basechinesedate; } else {// Второй соответствующий день используется для повышения эффективности вычислений // 1 января 2000 года, соответствующий лунный календарь 4697 (1999), startyear = baseyear + 99; startMonth = 1; startDate = 1; Китайский, Basechineseyear + 99; Chinesemonth = 11; Chinesedate = 25; } int DaysDiff = 0; // год для (int i = startyear; i <gregorianyear; i ++) {if (isgregianLeapyear (i)) {daysDiff+= 366; // Leap Year} else {DaysDiff += 365; }} // месяц для (int i = startMonth; i <gregorianMonth; i ++) {daysDiff+= dedsingRecorianMonth (gregorianyear, i - 1); } // daydaysdiff += gregoriandate - startDate; Chinesedate += DaysDiff; int lastdate = DaysInchinesemonth (китайский, Chinesemonth); while (chinesedate> lastdate) {chinesedate -= lastdate; Chinesemonth = nextchinesemonth (китайский, Chinesemonth); if (chinesemonth == 1) {cinkyyear ++; } lastdate = DaysInchinesemonth (китайский, чинепонт); }} / *** Рассчитайте солнечные термины* / private void computesolarterms () {int gregorianyear = internalget (calendar.year); int gregorianmonth = internalget (calendar.month); if (gregorianyear <1901 || gregorianyear> 2100) {return; } sectionAlterm = sectionAlterm (gregorianyear, gregorianmonth); Основная сетра = Принципиальный термин (Gregorianyear, Gregorianmonth); } / * Затем статический метод ~ * / / ** * Это високонный год в григорианском году * * @param year * @return * / public static boolean isgregorianLeapyear (int Год) {boolean iSleap = false; if (год % 4 == 0) {isleap = true; } if (Год % 100 == 0) {isleap = false; } if (год % 400 == 0) {isleap = true; } вернуть isLeap; } /*** Рассчитайте количество дней в григорийском году, и григорианский месяц начинается с 0! * * @param y * @param m * @return */ public static int desyingrecorianmonth (int y, int m) {int d = desyingregorianmonth [m]; if (m == calendar.february && isgregorianLeapyear (y)) {d ++; // Еще один день за пейзаж в григорийском году} return D; } /*** Рассчитайте солнечные члены григорианского месяца, григорианский месяц начинается с 0! * * @param y * @param m * @return */ public static int sectormer (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseyear + 1; while (ry> = sectionalltermyear [m - 1] [index]) {index ++; } int term = sectionAltermap [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; } возвратный термин; } /*** Рассчитайте Zhongqi григорианского года, и григорианский месяц начинается с 0! * * @param y * @param m * @return */ public static int princomererm (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseyear + 1; while (ry> = princelemyear [m - 1] [index]) {index ++; } int term = pronicalMempmap [m - 1] [4 * index + ry % 4]; if ((ry == 171) && (m == 3)) {term = 21; } if ((ry == 181) && (m == 5)) {term = 21; } возвратный термин; } / ** * Рассчитайте количество дней в лунном году * * @param y * @param m * @return * / public static int daysinchinesemonth (int y, int m) {// Примечание: перемещение месяц m <0 int index = y - basechineseeear + 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 = chinesemonths [2 * index + 1]; l = M - 9; if (((v >> l) & 0x01) == 1) {d = 29; }} else {v = chinesemonths [2 * index + 1]; v = (v >> 4) & 0x0f; if (v! = math.abs (m)) {d = 0; } else {d = 29; for (int i = 0; i <bigleapmonthyears.length; i ++) {if (bigleapmonthyears [i] == index) {d = 30; перерыв; }}}} return d; } / ** * Рассчитать следующий месяц лунного календаря * * @param y * @param m * @return * / public static intechinesemonth (int y, int m) {int n = math.abs (m) + 1; if (m> 0) {int index = y - basechineseyear + baseindex; int v = chinesemonths [2 * index + 1]; v = (v >> 4) & 0x0f; if (v == m) {n = -m; }} if (n == 13) {n = 1; } return n; } /* Дата первого дня календаря* / Частный статический окончательный финал int baseear = 1901; Частный статический финал int basemonth = 1; Частный статический окончательный на основе int = 1; Частный статический конечный int baseindex = 0; Частный статический финал int basechineseyear = 1900; Частный статический финал int basechinesemonth = 11; Частный статический финал int basechinesedate = 11; /* Китайская строка*/ частная статическая финальная строка [] китайская weeknames = {"", "воскресенье", "понедельник", "вторник", "четверг", "пятница", "суббота"}; Частная статическая финальная строка [] chinesemonthnames = {"", "first", "three", "Four", "Five", "Six", "семь", "восемь", "девять", "десять", "десять", "одиннадцать", "двенадцать"}; 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", «Десятый», «десятый», «десятый», «десятый», «десятый», «десятый», «десятый», «десятый», «десятый»}; Частная статическая финальная строка [] cremangeMnames = {«Великий холод», «дождевая вода», «весенний равноденствие», «Зеленый дождь», «Лето Солнечный», «Зеленое лето», «Зеленое лето», «Зеленое лето», «Зеленое лето», «Лето Солнечное», «Зеленое лето», «Звездное лето», «Сентябрьское равноденствие», «Сентябрьский эквинокс», «Frost Fall», «Снежно снег», «Зило»; Частная статическая финальная строка [] sectormnames = {«Little Cold», «Bird Spring», «Jingzhe», «Цинминг», «Начало лета», «Зерновые семена», «Маленькая жара», «Птица осень», «Белая роса», «Холодная роса», «Разбивая зима», «высокий снег»}; Частная статическая конечная строка [] stemnames = {"", "jia", "yi", "bing", "ding", "wu", "ji", "geng", "xin", "ren", "gui"}; Частная статическая конечная строка [] branchnames = {"", "zi", "ug", "yin", "mao", "chen", "si", "wu", "shen", "you", "Xu", "hai"}; Частная статическая конечная строка [] AnimalNames = {"", "Rat", "Ox", "Tiger", "Rabbit", "Dragon", "Snake", "Horse", "Sheep", "Monkey", "Chicken", "Dog", "Pig"}; / * Далее находится таблица сжатия данных ~ */ 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}; Частный статический окончательный char [] [] sectormaltermap = {{7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 5, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5}, {5, 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 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, 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, 76, 76, 76, 108, 76, 108, 108, 76, 76, 108, 108, 76, 76, 76, 108, 76, 76, 108, 76, 76, 76, 76, 76, 76, 76, 76, 76, 108, 108, 108, 108, 76, 108, 108, 108, 108, 76, 108, 108, 76, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 76, 108. 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, 150, 200, 200, 201, 250,}, {17, 53, 85, 124, 150, 200, 200, 200, 200, 250,}, {17, 53, 85, 124, 158, 200, 200, 200, 250, 20150,}, {17, 53, 85, 124, 158, 200, 200, 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, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 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, 22}}; Частный статический финальный char [] [] cenralmyear = {{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, 201, {21, 49, 81, 116, 144, 176, 200, 201, 201, 201, 201, {21, 49, 81, 116, 144, 176, 200, 201, 201, 201, {21, 49, 81, 144, 176, 188, 201, 201, 201, {21, 49, 81, 144, 176, 200, 201, 201,}, {21, 49, 81, 144, 188, 200, 201, 201, {21, 49, 81, 144, 188, 200, 201, 201. 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}}; Частный статический финальный char [] deseingRecorianMonth = {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, 0x6. 0x02, 0xd2, 0x52, 0xa9, 0x05, 0x49, 0x0d, 0x2a, 0x45, 0x2b, 0x09, 0x56, 0x01, 0xb5, 0x20, 0x6d, 0x01, 0x59, 0x69, 0xd4, 0x05, 0x05, 0x59, 0x69, 0xd4, 0x. 0xa9, 0x56, 0xa5, 0x04, 0x2b, 0x09, 0x9e, 0x38, 0xb6, 0x08, 0xec, 0x74, 0x6c, 0x05, 0xd4, 0x0a, 0xe4, 0x6a, 0x52, 0x05, 0x0a, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x 0x42, 0x5b, 0x04, 0xb6, 0x04, 0xb4, 0x22, 0x6a, 0x05, 0x52, 0x75, 0xc9, 0x0a, 0x52, 0x05, 0x35, 0x55, 0x4d, 0x0a, 0x5a, 0x35, 0x55, 0x4d, 0x0a, 0x5a, 0x5, 0x3, 0x5, 0x5, 0x3, 0x35, 0x55, 0x4d, 0x0a, 0x35, 0x55, 0x4d, 0x0a, 0x35, 0x55, 0x4d, 0x0a, 0x35, 0x55, 0x4d, 0x0a, 0x35, 0x55, 0x4d, 0x0a, 0x35, 0x55, 0x4d, 0x0a, 0x35, 0x55, 0x4d, 0x0a. 0xb5, 0x02, 0x6a, 0x8a, 0x68, 0x05, 0xa9, 0x0a, 0x8a, 0x6a, 0x2a, 0x05, 0x2d, 0x09, 0xaa, 0x48, 0x5a, 0x01, 0xb5, 0x09, 0x48, 0x5a, 0x01, 0xb5, 0x09, 0x48, 0x6, 0x01, 0xb5, 0x. 0x05, 0x25, 0x75, 0x95, 0x0a, 0x96, 0x04, 0x4d, 0x54, 0xad, 0x04, 0xda, 0x04, 0xd4, 0x44, 0xb4, 0x05, 0x54, 0x85, 0x52, 0x05, 0x05, 0x0., 0x05, 0x0. 0x56, 0x6a, 0x56, 0x02, 0x6a, 0x41, 0xda, 0x02, 0xb2, 0xa1, 0xa9, 0x05, 0x49, 0x0d, 0x0a, 0x6d, 0x2a, 0x09, 0x56, 0x01, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50, 0x50. 0xd9, 0x02, 0xd1, 0x3a, 0xa8, 0x05, 0x29, 0x85, 0xa5, 0x0c, 0x2a, 0x09, 0x96, 0x54, 0xb6, 0x08, 0x6c, 0x09, 0x64, 0x45, 0x08, 0x6c, 0x09, 0x64, 0x45, 0x. 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, 0x05, 0xda, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x. 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, 0x05, 0xb2, 0x55, 0x49, 0x0b, 0x05, 0x55, 0x49, 0x. 0x39, 0x36, 0x01, 0x6d, 0x80, 0x6d, 0x01, 0xd9, 0x02, 0xe9, 0x6a, 0xa8, 0x05, 0x29, 0x0b, 0x9a, 0x4c, 0xaa, 0x08, 0xb6, 0x9a, 0x3, 0x3, 0x.3, 0x.3, 0x.38, 0x.3, 0x.3, 0x3, 0x.38, 0x3, 0x. 0x6c, 0x09, 0x54, 0x75, 0xd4, 0x0a, 0xa4, 0x05, 0x45, 0x55, 0x95, 0x0a, 0x9a, 0x04, 0x55, 0x44, 0xb5, 0x04, 0x6a, 0x82, 0x44, 0xb5, 0x04, 0x6a, 0x82, 0x6a, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x. 0x0a, 0x92, 0x6a, 0x4a, 0x05, 0x55, 0x0a, 0x2a, 0x4a, 0x5a, 0x02, 0xb5, 0x02, 0x31, 0x69, 0x31, 0x73, 0xa9, 0x0a, 0x4a, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5, 0x5. 0x2d, 0x09, 0x5a, 0x01, 0xd5, 0x48, 0xb4, 0x09, 0x68, 0x89, 0x54, 0x0b, 0xa4, 0x0a, 0xa5, 0x6a, 0x95, 0x04, 0xad, 0x08, 0x6a, 0x444, 0x444, 0xa444, 0xa44, 0xa44, 0xa4, 0xa444, 0x. 0x04, 0x74, 0x05, 0xb0, 0x25, 0x54, 0x03}; Приватная строка getChineseterm () {if (get (calendar.date) == get (cilina_sectional_term)) {return sectionAltermNames [get (calendar.month)]; } else if (get (calendar.date) == get (cilina_principle_term)) {return pronitermNames [get (calendar.month)]; } else return null; } // Добавить Skywang Private String getLunarfestival () {int day = get (cilina_date); int month = get (cilina_month); Строка Stoday = день <10? "0" + день: "" + день; Строка smonth = месяц <10? "0"+(месяц): "+(месяц); return lfestival.get (smonth+stoday);} частная строка getSolarfestival () {int day = get (calendar.date); int month = get (calendar.month); строка stoday = day <10? return sfestival.get (smonth+stoday); } private String getFestivalorMortAte () {String ret; if ((ret = getSolarFestival ())! = null) return ret; if ((ret = getlunarfestival ())! = null) return ret; вернуть GetChinese (get (cilina_term_or_date)); } // Грегорианский фестиваль частный статический хэшмап <строка, строка> sfestival = new Hashmap <String, String> (); // Lunar Interene Private Static Hashmap <String, String> lfestival = new HashMap <String, String> (); static {sfestival.put ("0101", "Новый год"); sfestival.put ("0214", "Valenteen Day"); sfestival.put ("0308", "Женский день"); sfestival.put ("0312", "Arbor Day"); sfestival.put ("0401", "День апреля"); sfestival.put ("0501", "День труда"); sfestival.put ("0504", "Молодежный день"); sfestival.put ("0601", "Детский день"); sfestival.put ("0701", "Центрирующий день"); sfestival.put ("0801", "День армии"); sfestival.put ("0910", "День учителя"); 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"); }}