يستخدم إنتاج التقويم الدائم هنا بشكل أساسي فئة التقويم وفئة GregorianCalendar. دعنا أولاً نراجع الأساسيات:
الأجزاء الأساسية
1. فئة التقويم.
1. الحقول الرئيسية:
العام (السنة) ، الشهر (يبدأ الشهر من 0) ، التاريخ (يوم يناير) ، ساعة (يشير إلى الساعة في الصباح أو بعد الظهر) ، HOW_F_DAY (يشير إلى الساعة في اليوم.) ، day_of_week (يشير إلى عدد الأسابيع في الأسبوع) ، day_of_month (يشير إلى عدد الأسابيع في السنة) ، اليوم _ عدد الأسابيع في الشهر) ، week_of_year (يشير إلى عدد الأسابيع في العام)
2. احصل على كائن فئة التقويم.
// الحصول على طريقة ثابتة في الحصول على فئة التقويم. Calendar Ca = Calendar.getInstance () ؛
3. الأساليب الرئيسية
مجموعة void (حقل int ، قيمة int) // معلمات فئة التقويم الميداني ، مثل تاريخ شهر السنة ، إلخ .... مجموعة الفراغ (int year ، int month ، int date) // set year ، الشهر واليوم. مجموعة void (int year ، month ، int date ، int hourfday ، int minute) // set year ، month ، day ، and incal) // set year ، month ، day ، head ، incture ، and second void settime (date date) ؛ INT GET (Int Field) // إرجاع قيمة حقل التقويم المحدد. على سبيل المثال: int month = acobj.get (calendar.month) ؛ Date GetTime () // إرجاع كائن تاريخ يمثل قيمة وقت التقويم. Long GetTimeInmillis () // إرجاع عدد المللي ثانية من 1970.1.1 00:00:00 إلى التقويم. void add (حقل int ، Amont) ؛ // وفقًا لقواعد التقويم ، أضف أو طرح مقدار الوقت المحدد لحقل تقويم معين. يمكن إضافتها أو طرحها. على سبيل المثال: Caobj.add (Calendar.mon ، 1) الشهر المقبل.
2. فئة Gregoriancalendar.
1. الحصول على هذا الكائن الفئة
Calendar Ca = GregorianCalendar () // الافتراضي لحظة الحالية. Calendar CA = Gregoriancanlendar الجديد (int year ، int month ، int dayofmonth) // في البداية ، كائن فئة غريغوري مع سنة وشهر ويوم محدد. Calendar CA = New Gregoriancanlendar (int year ، int month ، int dayofmonth ، int hourfday ، int minute) يتمتع كائن فئة Gregorian في البداية سنة وشهر ويوم محدد. Calendar CA = New Gregoriancanlendar (int year ، int month ، int dayofmonth ، int hourfday ، int int ، int second) // في البداية ، كائن فئة غريغوريان مع سنة وشهر ويوم محدد. يتم الحصول على جميع ما سبق عن طريق الحصول على اللغة الافتراضية وكائنات المنطقة الزمنية الافتراضية.
2. استخدام الاستخدام يرث بشكل رئيسي التقويم الطبقي.
قسم مثال
3. رمز التقويم الدائم
package com.via.mce.monthcalend.utils ؛ import java.util.calendar ؛ import java.util.date ؛ import java.util.greiancalend ؛ استيراد java.util.hashmap ؛/*** lunar. <br> * وفر حجم العام والشهر والمصطلحات الشمسية السابقة بين عامي 1901 و 2100 من التقويم القمري ، ثم حساب بناءً على هذه البيانات. <br> * <br> * تمت إضافة العديد من حقول السمات الثابتة للتقويم القمري ، ويمكنك استخدام طريقة GET () للحصول على القيمة المقابلة للتقويم ؛ <br> * يمكن أيضًا ضبط التقويم التقويمي القمري والشهر واليوم باستخدام طريقة set ()/add ()/roll () ، وسمات التقويم القمري الأخرى تلقائيًا ؛ <br> * بالإضافة إلى ذلك ، يتم أيضًا توفير طريقة getchinese (Int Field) للحصول على نص صيني للتقويم القمري (ينطبق فقط على سمات التقويم القمري والأسبوع). <br> * <ul> * <li> صيني_ر - السنة القمرية </li> * <li> صينية inching_month - الشهر القمري </li> * <li> صيني - يوم القمري </li> * <li> صيني_ساكتال_ها - شروط الطاقة الشمسية من الشهر </li> * <li> الصينيين_ ينبع من السنة القمرية </li> * <li> صينية inval_earthly_branch - الفروع الأرضية للسنة القمرية </li> * <li> صينية inching_zodiac - زودياك من السنة القمرية </li> * <li> صينية_ خلاف ذلك ، إذا كان اليوم هو اليوم الأول من اليوم ، فإنه يشير إلى الشهر القمري ، وإلا فإنه يشير إلى يوم القمر. * </ul> * ملاحظة: <br> * نظرًا لإعداد فئة التقويم ، يبدأ الشهر الغريغوري من 0. جميع الطرق تتبع هذه الاتفاقية. <br> * لكن جميع سمات القمر تبدأ من 1. حتى في الطريقة التي يوفرها التقويم ، يبدأ الشهر القمري بـ 1 ويمثل شهر القفز برقم سالب. <br> * سوف تتسبب طريقة Clear () في التقويم القمري ويكون تواريخ التقويم الغريغوري غير متناسق أو لا يمكن تحقيق تأثير إعادة التعيين المتوقع. يجب تجنبها قدر الإمكان. <br> * عند استخدام getSimpleDateString () للحصول على سلسلة تاريخ التقويم الغريغوري ، تم تصحيح الشهر التقويم الغريغوري ؛ <br> * عند استخدام getSimpleChinesEdateString () للحصول على سلسلة تاريخ التقويم القمري ، يتم تمثيل شهر Lunar Leap بواسطة *. <br> * * version 0.12 2011-9-5 <br> * <Blockquote> تم إصلاح مشكلة حيث تم احتجاز التقويم في دورة ميتة عند تهيئة التقويم باستخدام الشهر الأول من التقويم القمري. </blockquote> * version 0.11 2009-12-27 <br> * <blockquote> إصلاح المشكلة حيث لم يتم حساب التقويم القمري عند الحصول على التقويم القمري الصيني ؛ <br> * أضف حقلًا صينيًا inval_urm_or_date لتقليد طريقة العرض في تقويم المكتب: إذا كان هناك مصطلح شمسي في ذلك اليوم ، فإنه يشير إلى المصطلح الشمسي ، إذا كان اليوم الأول من الشهر القمري ، * وإلا فإنه يشير إلى يوم القمر. </blockquote> * version 0.10 2009-12-22 */public chinesecalendar يمتد gregoriancalendar {private static final long serialversionuid = 8l ؛ / ** السنة القمرية*/ Final static Final int inchane_year = 801 ؛ / ** الشهر القمري*/ Final Static Final int inchane_month = 802 ؛ / ** Lunar Day*/ public static Final int inchane_date = 803 ؛ / ** يوم غريغوري يتوافق مع المصطلح الشمسي من الشهر (المصطلح الشمسي السابق)*/ العام الثابت العام int insho_sectional_term = 804 ؛ / ** Gregorian Day يتوافق مع المصطلح الشمسي للشهر (المصطلح الشمسي التالي)*/ Final static Final int insho_principle_term = 805 ؛ / ** تنبع السماوي*/ static static int insale_heenly_stem = 806 ؛ / ** الفروع الأرضية*/ public static Final int inchane_earthly_branch = 807 ؛ / ** علامات Zodiac (علامات البروج)*/ الثابتة العامة النهائية int invaling_zodiac = 808 ؛ / ** المصطلح الشمسي أو يوم القمر*/ ثابت عام نهائي int inchale_term_or_date = 888 ؛ // ADD by Skywang/ ** Lunar Festival*/ Public Static Final Lunar_Festival = 809 ؛ / ** المصطلح الشمسي*/ ثابت ثابت int solar_festival = 810 ؛ / ** المصطلح الشمسي*/ ثابت ثابت في int into_term = 811 ؛ / ** الشهر أو يوم القمر*/ Final Static Final int inchale_month_or_date = 812 ؛ / ** المهرجان أو المصطلح الشمسي أو يوم القمر*/ الثابت العام FINTIVAL_OR_TERM_OR_DATE = 813 ؛ int int inshareyear ؛ خاص int Chinesemonth. // ابدأ بـ 1 ، تمثل الأرقام السلبية شهر قفزة int int chinesedate ؛ قسم int الخاص ؛ // Gregorian Day Private int intererm ؛ // Gregorian Day boolean private assevialdesed. // ما إذا كان قد تم حساب تاريخ القمر وتأكيده المنطقي المنطقي المحدد ؛ // ما إذا كان المصطلح الشمسي قد تم حسابه وتأكيده Lastsetchinese الخاص ؛ // هو الإعداد الأخير للسمة القمرية/** إنشاء مثيل باستخدام الوقت الحالي. */ public chinesecalendar () {super () ؛ } /** بناء مثيل باستخدام الوقت المحدد. */ public chinesecalendar (date d) {super.settime (d) ؛ } /** بناء مثيل باستخدام الوقت المحدد. */ chinesecalendar العامة (Calendar c) {this (c.getTime ()) ؛ } /** إنشاء مثيل باستخدام تاريخ غريغوري المحدد. */ chinesecalendar العامة (int y ، int m ، int d) {super (y ، m ، d) ؛ } /*** بناء مثيل مع التاريخ المحدد. * * param ischinese * هل هو تاريخ القمر * param y * param m * param d */ public chinesecalendar (ischinese boolean ، int y ، int m ، int d) {if (ischinese) {set (inchoade_year ، y) ؛ SET (Chinese_month ، M) ؛ SET (inchank_date ، d) ؛ } آخر {set (y ، m ، d) ؛ }} مجموعة void العامة (حقل int ، القيمة int) {compuefneed (حقل) ؛ if (ischinesefield (field)) {// lunar calendar switction switch (field) {case inchoval_year: thareyear = value ؛ استراحة؛ CASE THANERA_MONTH: chinesemonth = value ؛ استراحة؛ CASE THANERA_DATE: chinesedate = value ؛ استراحة؛ الافتراضي: رمي جديد غير unalfalArgumentException ("إعدادات الحقل غير المدعومة:" + حقل) ؛ } lastsetchinese = true ؛ } آخر {// سمة التقويم غير lunar super.set (الحقل ، القيمة) ؛ lastsetchinese = false ؛ } arefieldsset = false ؛ arechinesefieldscomemed = false ؛ aresolartermscomemed = false ؛ } public int get (int field) {computeifneed (field) ؛ if (! ischinesefield (field)) {return super.get (field) ؛ } التبديل (الحقل) {case invalue_year: return thareyear ؛ CASE THANERA_MONTH: Return Chinesemonth ؛ CASE THANERA_DATE: return chinesedate ؛ CASE THANERING_SECTER_TERM: إرجاع المقطع القسم ؛ CASE THANERING_PRINCIPLE_TERM: Return Principleterm ؛ CASE THERANE_HEANILY_STEM: RETURT (CHAREYEAR - 4) ٪ 10 + 1 ؛ CASE THANERA_EARTHLY_BRANCH: CASE THANERING_ZODIAC: RETURT (Chareeryear - 4) ٪ 12 + 1 ؛ Case aleary_month_or_date: if (get (invale_date) == 1) {return invalue_month ؛ } else {return thaneval_date ؛ } case inchalize_term_or_date: int Option ؛ if (get (calendar.date) == get (invale_sectional_term)) {Option = invale_secteal_term ؛ } آخر إذا (get (calendar.date) == GET (inchoval_principle_term)) {OPTION = invalue_principle_term ؛ } آخر إذا (GET (inchoval_date) == 1) {OPTION = invaling_month ؛ } else {Option = invale_date ؛ } خيار العودة ؛ الافتراضي: رمي جديد غير unalfalArgumentException ("GET Field Notuported GET:" + Field) ؛ }} public void add (int field ، int come) {computeifneed (field) ؛ if (! ischinesefield (field)) {super.add (الحقل ، المبلغ) ؛ lastsetchinese = false ؛ arechinesefieldscomemed = false ؛ aresolartermscomemed = false ؛ يعود؛ } switch (حقل) {case invalue_year: ashareyear += come ؛ استراحة؛ case inchalize_month: for (int i = 0 ؛ i <come ؛ i ++) {chinesemonth = nextChinesEmanth (thareyyear ، chinesemonth) ؛ if (chinesemonth == 1) {thareyear ++ ؛ } } استراحة؛ CASE THANERA_DATE: int maxdate = daySinChinesemonth (Chareeryear ، Chinesemonth) ؛ لـ (int i = 0 ؛ i <come ؛ i ++) {chinesedate ++ ؛ if (chinesedate> maxdate) {chinesedate = 1 ؛ chinesemonth = nextChinesemonth (الصينية ، Chinesemonth) ؛ if (chinesemonth == 1) {thareyear ++ ؛ } maxDate = daysInChinesemonth (Chineseyear ، Chinesemonth) ؛ }} الافتراضي: رمي جديد alfictalargumentException ("الحقل غير المدعوم:" + حقل) ؛ } lastsetchinese = true ؛ arefieldsset = false ؛ arechinesefieldscomemed = false ؛ aresolartermscomemed = false ؛ } public void Roll (int field ، int come) {computeifneed (field) ؛ if (! ischinesefield (field)) {super.roll (الحقل ، المبلغ) ؛ lastsetchinese = false ؛ arechinesefieldscomemed = false ؛ aresolartermscomemed = false ؛ يعود؛ } switch (حقل) {case invalue_year: ashareyear += come ؛ استراحة؛ case inchalize_month: for (int i = 0 ؛ i <come ؛ i ++) {chinesemonth = nextChinesEmanth (thareyyear ، chinesemonth) ؛ } استراحة؛ CASE THANERA_DATE: int maxdate = daySinChinesemonth (Chareeryear ، Chinesemonth) ؛ لـ (int i = 0 ؛ i <come ؛ i ++) {chinesedate ++ ؛ if (chinesedate> maxdate) {chinesedate = 1 ؛ }} الافتراضي: رمي جديد alfictalargumentException ("الحقل غير المدعوم:" + حقل) ؛ } lastsetchinese = true ؛ arefieldsset = false ؛ arechinesefieldscomemed = false ؛ aresolartermscomemed = false ؛ } /*** احصل على اللغة الصينية للسمة ، وحقول السمات التي يمكن استخدامها هي day_of_week وجميع حقول السمات القمرية. * * param field * @return */ public string getChinese (int field) {computeifneed (field) ؛ Switch (حقل) {case inchalize_year: return getChinese (invalue_hevenly_stem) + getChinese (invale_earthly_branch) + "year" ؛ CASE THANERA_MONTH: إذا (chinesemonth> 0) إرجاع chinesemonthnames [chinesemonth] + "الشهر" ؛ عودة "قفزة" + ChinesemonthNames [-ChinesEmonth] + "شهر" ؛ CASE THANERA_DATE: إرجاع chinesedatenames [chinesedate] ؛ CASE THANERA_SECTER_TERM: إرجاع sectionMresNames [GET (CALENDAR.MONTH)] ؛ CASE THANERA_PRINCIPLE_TERM: إرجاع raincisterMnames [GET (CALENDAR.MONTH)] ؛ Case invale_heavenly_stem: return stemnames [get (field)] ؛ CASE aleary_earthly_branch: return branchNames [get (field)] ؛ CASE THANERA_ZODIAC: إرجاع الأسماء الحيوانية [GET (Field)] ؛ CASE CALENDAR.DAY_OF_WEEK: إرجاع chineseweeknames [GET (field)] ؛ Case aleary_term_or_date: return getChinese (get (invale_term_or_date)) ؛ CASE LUNAR_FESTIVAL: return getlunarfestival () ؛ CASE SOLAR_FESTIVAL: return getSolarfestival () ؛ Case Festival_or_term_or_date: return getFestivalTerMordate () ؛ // todo check case inchale_month_or_date: return getChinese (get (inchoval_month_or_date)) ؛ CASE THANERA_TERM: return getChineseterm () ؛ الافتراضي: رمي جديد غير unalfalArgumentException ("الحقل غير المدعوم الصيني GET:" + Field) ؛ }} السلسلة العامة getSimplegreAndAteString () {return new StringBuffer (). إلحاق (get (year)). إلحاق ("-") .append (get (الشهر) + 1). } السلسلة العامة getSimpleChinesEdateString () {return new StringBuffer () .Append (get (inchoval_year)) .Append ("-") .Append (get (inchoval_month)> 0؟ } السلسلة العامة getChinesEdateString () {return New StringBuffer (). إلحاق (getChinese (inchoval_year)). } السلسلة العامة toString () {StringBuffer buf = new StringBuffer () ؛ buf.append (getSimplegreAndateString ()). إلحاق ("|") .append (getChinese (day_of_week)). . إرجاع buf.toString () ؛ } / ** * حدد ما إذا كانت سمة Lunar * * param حقل * @RETURN * / private Boolean Ischinesefield (int field) {switch (field) {case invalue_year: case invalue_month: case inchaning_date: case inchines_section_spranch: case inchinese_principle: case. inchoval_term_or_date: case invale_month_or_date: return true ؛ الافتراضي: إرجاع خطأ ؛ }} / ** * حدد ما إذا كانت سمة تتعلق بمصطلح الطاقة الشمسية * * param حقل * @REGARN * / private boolean iSchinesetermsfield (int field) {switch (field) {case inchoval_sectional_term: case inchoval_principle_term: case inchoval_or_date: return true ؛ الافتراضي: إرجاع خطأ ؛ }} /** * إذا كانت السمات التي تم تعيينها في المرة الأخيرة ليست هي نفسها التي سيتم تعيينها أو الحصول عليها هذه المرة (التقويم القمري /التقويم الغريغوري) ، <br> * على سبيل المثال ، آخر مرة قمت فيها بتعيينها هي التقويم القمري ، وأريد الآن تعيين التقويم gregorian ، <br> * تاريخ. * * param field */ private void computeifneed (int field) {if (ischinesefield (field)) {if (! lastsetchinese &&! arechinesefieldseded) {super.complete () ؛ Computechinesefields () ؛ arefieldsset = صحيح ؛ arechinesefieldscomputed = صحيح ؛ aresolartermscomemed = false ؛ } if (iSchinesetermsfield (field) &&! aresolartermscomputed) {computesolarterms () ؛ aresolarterms computed = true ؛ }} آخر {if (lastsetchinese &&! arefieldsset) {computegreadianfields () ؛ Super.COMPLETE () ؛ arefieldsset = صحيح ؛ arechinesefieldscomputed = صحيح ؛ aresolartermscomemed = false ؛ }}} / *** استخدم تاريخ القمر لحساب gregoriandate* / private void computegregorianfields () {int y = lovenyear ؛ int m = chinesemonth ؛ int d = chinesedate ؛ arechinesefieldscomputed = صحيح ؛ arefieldsset = صحيح ؛ lastsetchinese = false ؛ // ضبط نطاق التاريخ إذا (y <1900) y = 1899 ؛ آخر إذا (y> 2100) y = 2101 ؛ if (m <-12) m = -12 ؛ آخر إذا (M> 12) M = 12 ؛ إذا (d <1) d = 1 ؛ آخر إذا (D> 30) d = 30 ؛ int dateint = y * 10000 + math.abs (m) * 100 + d ؛ if (dateInt <19001111) {// shurly set (1901 ، calendar.january ، 1) ؛ Super.COMPLETE () ؛ } آخر إذا (dateint> 21001201) {// مجموعة كبيرة جدًا (2100 ، Calendar.December ، 31) ؛ Super.COMPLETE () ؛ } آخر {if (math.abs (m)> 12) {m = 12 ؛ } int days = chinesecalendar.daysinchinesemonth (y ، m) ؛ if (days == 0) {m = -m ؛ أيام = chinesecalendar.daysinchinesemonth (y ، m) ؛ } if (d> days) {d = days ؛ } set (y ، math.abs (m) - 1 ، d) ؛ Computechinesefields () ؛ int كمية = 0 ؛ بينما (ashoreyear! = y || chinesemonth! = m) {cause += daysInChinesemonth (الصية ، chinesemonth) ؛ chinesemonth = nextChinesemonth (الصينية ، Chinesemonth) ؛ if (chinesemonth == 1) {thareyear ++ ؛ }} المبلغ += d - chinesedate ؛ Super.Add (Calendar.Date ، المبلغ) ؛ } computechinesefields () ؛ } / *** احسب تاريخ التقويم القمري باستخدام تاريخ 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 = baseyear ؛ startMonth = basemonth ؛ startDate = على أساس ؛ الصينية = basechineseyear ؛ Chinesemonth = basechinesemonth ؛ chinesedate = basechinesedate ؛ } آخر {// يتم استخدام اليوم الثاني المقابل لتحسين كفاءة الحوسبة // 1 يناير 2000 ، التقويم القمري المقابل 4697 (1999) ، startyear = baseyear + 99 ؛ startMonth = 1 ؛ startDate = 1 ؛ الصية = basechineseyear + 99 ؛ Chinesemonth = 11 ؛ chinesedate = 25 ؛ } int daysdiff = 0 ؛ // year for (int i = startyear ؛ i <gregorianyear ؛ i ++) {if (isGreiNleApyear (i)) {daysdiff+= 366 ؛ // Leap Year} آخر {daysdiff += 365 ؛ }} // month for (int i = startMonth ؛ i <gregorianmonth ؛ i ++) {daysdiff+= daysingRegorianmonth (gregorianyear ، i - 1) ؛ } // daydaysdiff += Gregoriandate - startDate ؛ chinesedate += daysdiff ؛ int lastDate = daySinchinesemonth (Chareeryear ، Chinesemonth) ؛ بينما (chinesedate> lastDate) {chinesedate -= lastDate ؛ chinesemonth = nextChinesemonth (الصينية ، Chinesemonth) ؛ if (chinesemonth == 1) {thareyear ++ ؛ } lastDate = daysInChinesemonth (Chineshyear ، Chinesemonth) ؛ }} / *** حساب المصطلحات الشمسية* / private void computesolarterms () {int gregorianyear = internalget (calendar.year) ؛ int gregorianmonth = internalget (calendar.month) ؛ if (gregorianyear <1901 || gregorianyear> 2100) {return ؛ } SectionalTerm = sectionalterm (Gregorianyear ، Gregorianmonth) ؛ KINRASTERM = PRINCITIONTER (Gregorianyear ، Gregorianmonth) ؛ } / * التالي هو الطريقة الثابتة ~ * / / ** * هل هي سنة قفزة في السنة Gregorian * * param السنة * @RETURN * / public static boolean isgreianleapyear (int year) {boolean isLeap = false ؛ if (year ٪ 4 == 0) {isLeap = true ؛ } if (year ٪ 100 == 0) {isLeap = false ؛ } if (year ٪ 400 == 0) {isLeap = true ؛ } إرجاع Isleap ؛ } /*** احسب عدد الأيام في السنة الغريغورية ، ويبدأ الشهر الغريغوري من 0! * * param y * param m * @regurn */ public static int daysingRegorianMonth (int y ، int m) {int d = daysingreianmonth [m] ؛ if (m == calendar.februyt && isgreianleapyear (y)) {d ++ ؛ // يوم آخر في سنة قفزة في السنة الغريغورية} return d ؛ } /*** حساب الشروط الشمسية للشهر الغريغوري ، يبدأ الشهر الغريغوري من 0! * * param y * param m * return */ public static int sectionalterm (int y ، int m) {m ++ ؛ if (y <1901 || y> 2100) {return 0 ؛ } int index = 0 ؛ int ry = y - baseyear + 1 ؛ بينما (ry> = sectionalTermyear [m - 1] [index]) {index ++ ؛ } المصطلح int = 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 ؛ } مصطلح العودة ؛ } /*** حساب Zhongqi من السنة الغريغورية ، ويبدأ الشهر الغريغوري من 0! * * param y * param m * @return */ public static int arginisterm (int y ، int m) {m ++ ؛ if (y <1901 || y> 2100) {return 0 ؛ } int index = 0 ؛ int ry = y - baseyear + 1 ؛ بينما (ry> = knaringermyear [m - 1] [index]) {index ++ ؛ } المصطلح int = principtImmMap [m - 1] [4 * index + ry ٪ 4] ؛ if ((ry == 171) && (m == 3)) {term = 21 ؛ } if ((ry == 181) && (m == 5)) {term = 21 ؛ } مصطلح العودة ؛ } / ** * احسب عدد الأيام في السنة القمرية * * param y * param m * @regurn * / public int daysinchinesemonth (int y ، int m) {// note: leap month m <0 int index = y - basechineseear + 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 ؛ }} آخر إذا (9 <= m && m <= 12) {v = chinesemonths [2 * index + 1] ؛ L = M - 9 ؛ if (((v >> l) & 0x01) == 1) {d = 29 ؛ }} آخر {v = chinesemonths [2 * index + 1] ؛ v = (v >> 4) & 0x0F ؛ if (v! = math.abs (m)) {d = 0 ؛ } آخر {d = 29 ؛ لـ (int i = 0 ؛ i <bigleapmonthyears.length ؛ i ++) {if (bigleapmonthyears [i] == index) {d = 30 ؛ استراحة؛ }}}} return d ؛ } / ** * احسب الشهر التالي من التقويم القمري * * 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 = chinesemonths [2 * index + 1] ؛ v = (v >> 4) & 0x0F ؛ if (v == m) {n = -m ؛ }} if (n == 13) {n = 1 ؛ } return n ؛ } /* تاريخ اليوم الأول من التقويم* / private static int baseyear = 1901 ؛ استاتيكي خاص نهائي Int BASEMONTH = 1 ؛ int int static int instative = 1 ؛ int int int int static الخاص = 0 ؛ استاتيكي خاص نهائي int basechineseyear = 1900 ؛ استاتيكي خاص int basechinesemonth = 11 ؛ استاتيكي خاص int basechinesedate = 11 ؛ /* سلسلة صينية*/ سلسلة نهائية ثابتة [] chineseweeknames = {"" ، "الأحد" ، "الاثنين" ، "الثلاثاء" ، "الخميس" ، "الجمعة" ، "السبت"} ؛ السلسلة النهائية الثابتة الخاصة [] chinesemonthnames = {"" ، "First" ، "Three" ، "Four" ، "Five" ، "Six" ، "Seven" ، "Eight" ، "Nine" ، "Ten" ، "Ten" ، "Eleven" ، "Twelve"} ؛ السلسلة النهائية الثابتة الخاصة [] chinesedatenames = {"" ، "أولاً" ، "أولاً" ، "رابع" ، "خمسة" ، "سادس" ، "سابع" ، "ثامن" ، "تسعة" ، "تسعة" ، "Tath" ، "Tath" ، "Tath" ، Tath "، Tatt" ، Tatt "، Tatt" ، Tatt "، Tatt" ، Tatt "، Tatt. "Tenth" ، "Tenth" ، "Tenth" ، "Tenth" ، "Tenth" ، "Tenth" ، "Tenth" ، "Tenth" ، "Tenth"} ؛ السلسلة النهائية الثابتة الخاصة [] chargetermnames = {"Great Cold" ، "Rain Water" ، "Spring Equinox" ، "Green Rain" ، "Summer Solar" ، "Green Summer" ، "Green Summer" ، "Green Summer" ، "Green Green Summer" ، "Summer Snow Fall" ، السلسلة النهائية الثابتة الخاصة [] SectionTermNames = {"Little Cold" ، "Bird Spring" ، "Jingzhe" ، "Qingming" ، "بداية الصيف" ، "الحبيبات" ، "ليتل هيت" ، "الطيور الخريف" ، "الندى الأبيض" ، "Cold Dew" ، "Winter Winter" ، "High Snow" ؛ السلسلة النهائية الثابتة الخاصة [] stemnames = {"" ، "Jia" ، "Yi" ، "Bing" ، "Ding" ، "Wu" ، "Ji" ، "Geng" ، "Xin" ، "Ren" ، "GUI"} ؛ Static Final Final String [] BranchNames = {"" ، "Zi" ، "UG" ، "Yin" ، "Mao" ، "Chen" ، "Si" ، "Wu" ، "Shen" ، "You" ، "Xu" ، "Hai"} ؛ السلسلة النهائية الثابتة الخاصة [] animnames = {"" ، "RAT" ، "OX" ، "Tiger" ، "Rabbit" ، "Dragon" ، "Snake" ، "Horse" ، "Sheep" ، "Monkey" ، "Chicken" ، "Dog" ، "Pig"} ؛ / * التالي هو جدول ضغط البيانات ~ */ private static int [] BigLeapmonthyears = {6 ، 14 ، 19 ، 25 ، 33 ، 36 ، 38 ، 41 ، 44 ، 52 ، 55 ، 79 ، 117 ، 136 ، 147 ، 150 ، 155 ، 158 ، 185 ، 193} ؛ char Final Static Final char [] [] SectionalTermMap = {{7 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 5 ، 5 ، 6 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 4 ، 4 ، 5 ، 5 ، {5 ، 4 ، 5 ، 4 ، 4 ، 5 ، 4 ، 4 ، 4 ، 4 ، 4 ، 4 ، 4 ، 4 ، 4 ، 3 ، 3 ، 4 ، 4 ، 3 ، 3 ، 3} ، {6 ، 6 ، 7 ، 7 ، 6 ، 6 ، 6 ، 6 ، 5 ، 6 ، 6 ، 6 ، 5 ، 5 ، 6 ، 6 ، 5 ، 5 ، 6 ، 6 ، 5 ، 5 ، 5 ، 4 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 5 ، 4 ، 5 ، 5 ، 4 ، 4 ، 4 ، 5 ، 4 ، 4 ، 4 ، 4 ، 5} ، {6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 6 ، 5 ، 6 ، 6 ، 6 ، 5 ، 6 ، 6 ، 5 ، 5 ، 5 ، 6 ، 5 ، 5 ، 5 ، 5 ، 4 ، 5 ، 5 ، 5} ، 6 ، 6 ، 5 ، 5 ، 6 ، 6 ، 5 ، 5 ، 5 ، 6 ، 5 ، 5 ، 5 ، 4 ، 5 ، 5 ، 5 ، 5 ، 5} ، {7 ، 8 ، 8 ، 8 ، 7 ، 7 ، 8 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 6 ، 7 ، 7 ، 6 ، 6 ، 7 ، 6 ، 6 ، 7 ، 7 ، 8 ، 7 ، 8 ، 8 ، 8 ، 7 ، 7 ، 8 ، 8 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 6 ، 6 ، 6 ، 7 ، 7 ، 7} ، {8 ، 8 ، 8 ، 9 ، 8 ، 8 ، 8 ، 7 ، 7 ، 8 ، 8 ، 7 ، 7 ، 8 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 7 ، 6 ، 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 ، 8 ، 8 ، 8} ، {8 ، 8 ، 8 ، 7 ، 7 ، 8 ، 8 ، 7 ، 7 ، 8 ، 7 ، 7 ، 8 ، 7 ، 7 ، 7 ، 7} ، {7 ، 8 ، 8 ، 8 ، 7 ، 7 ، 8 ، 8 ، 7 ، 7 ، 7 ، 8 ، 7 ، 7 ، 7 ، 6 ، 7 ، 7 ، 7 ، 6 ، 7 ، 7 ، 6 ، 6 ، 7 ، 7}} ؛ char Final Static Final char [] [] SectionalTermyear = {{13 ، 49 ، 85 ، 117 ، 149 ، 185 ، 2015 ، 250 ، 250} ، {13 ، 45 ، 81 ، 117 ، 149 ، 185 ، 201 ، 250} ، { 172 ، 200 ، 201 ، 250} ، {13 ، 44 ، 72 ، 104 ، 132 ، 168 ، 200 ، 201 ، 250} ، {5 ، 33 ، 68 ، 96 ، 124 ، 152 ، 188 ، 200 ، 201 ، 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 ، {17 ، 53 ، 85 ، 124 ، 156 ، char Final Static Final Char [] [] [] {{{21 ، 21 ، 21 ، 21 ، 20 ، 20 ، 21 ، 21 ، 21 ، 20 ، 20 ، 21 ، 21 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 19 ، 20 ، 20 ، 20 ، 19 ، 19 ، 19 ، 20} 19 ، 19 ، 18 ، 18 ، 18 ، 18 ، 18 ، 18 ، 18} ، {21 ، 21 ، 22 ، 21 ، 21 ، 21 ، 21 ، 20 ، 21 ، 21 ، 21 ، 20 ، 20 ، 21 ، 20 ، 20 ، 21 ، 21 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20} ، {21 ، 21 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 20 ، 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 ، 20 ، 20 ، 21 ، 21 ، 20 ، 20 ، 21 ، 21} ، 21 ، 22 ، 21 ، 21 ، 21 ، 21 ، 20 ، 21 ، 21 ، 21 ، 20 ، 21 ، 21 ، 21 ، 21 ، 24 ، 23 ، 23 ، 23 ، 23 ، 22 ، 23 ، 23 ، 23 ، 22 ، 22 ، 23 ، 22 ، 22 ، 22 ، 22 ، 23 ، 23 ، 23} ، {23 ، 24 ، 24 ، 24 ، 23 ، 23 ، 24 ، 24 ، 23 ، 23 ، 23 ، 24 ، 23 ، 23 ، 23 ، 22 ، 23 ، 23 ، 22 ، 23 ، 23 ، 23 ، 23 ، 23 ، 23 ، 23 ، 24 ، 24 ، 23 ، 23 ، 23 ، 24 ، 23 ، 23 ، 23 ، 23 ، 23 ، 23 ، 23 ، 22 ، 22 ، 23 ، 23 ، 23 ، 23} ، {23 ، 23 ، 23 ، 23 ، 23 ، 23 ، 23 ، 22 ، 22 ، 23 ، 23 ، 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 ، 22}} ؛ char Final Final char [] [] [] {{{13 ، 45 ، 81 ، 113 ، 149 ، 185 ، 2015 ، 201 ، {21 ، 57 ، 93 ، 125 ، 161 ، 193 ، 201} ، {21 ، 56 ، 88 ، 120 ، 152 ، 188 ، 200 ، 201 ، 49 ، 201} ، {28 ، 60 ، 88 ، 116 ، 148 ، 180 ، 200 ، 201} ، {25 ، 53 ، 84 ، 112 ، 144 ، 172 ، 200 ، 201 ، 124 ، 160 ، 192 ، 200 ، 201} ، {16 ، 44 ، 80 ، 112 ، 148 ، 180 ، 200 ، 201} ، {17 ، 53 ، 88 ، 120 ، 156 ، 188 ، 200 ، 201}} ؛ char Final Static Final [] DaysingRegorianmonth = {31 ، 28 ، 31 ، 30 ، 31 ، 30 ، 31 ، 31 ، 30 ، 31} ؛ char Final Final char [] chinesemonths = {0x00 ، 0x04 ، 0xad ، 0x08 ، 0x5a ، 0x01 ، 0xd5 ، 0x54 ، 0xb4 ، 0x09 ، 0x64 ، 0x05 ، 0x59 ، 0x45 ، 0x95 ، 0x95 ، 0x0a ، 0xa6 ، 0xad ، 0x08 ، 0x5a ، 0x62 ، 0xda ، 0x04 ، 0xb4 ، 0x05 ، 0xb4 ، 0x55 ، 0x52 ، 0x0d ، 0x94 ، 0x0a ، 0x4a ، 0x2a ، 0x56 ، 0x02 ، 0x6d ، 0x71 ، 0x. 0x02 ، 0xd2 ، 0x52 ، 0xa9 ، 0x05 ، 0x49 ، 0x0d ، 0x2a ، 0x45 ، 0x2b ، 0x09 ، 0x56 ، 0x01 ، 0xb5 ، 0x20 ، 0x6d ، 0x01 ، 0x59 ، 0x69 0xa9 ، 0x56 ، 0xa5 ، 0x04 ، 0x2b ، 0x09 ، 0x9e ، 0x38 ، 0xb6 ، 0x08 ، 0xec ، 0x74 ، 0x6c ، 0x05 ، 0xd4 ، 0x0a ، 0xe4 ، 0x6a ، 0x52 0x42 ، 0x5b ، 0x04 ، 0xb6 ، 0x04 ، 0xb4 ، 0x22 ، 0x6a ، 0x05 ، 0x52 ، 0x75 ، 0xc9 ، 0x0a ، 0x52 ، 0x05 ، 0x35 ، 0x55 ، 0x4d ، 0x0a ، 0x5 0xb5 ، 0x02 ، 0x6a ، 0x8a ، 0x68 ، 0x05 ، 0xa9 ، 0x0a ، 0x8a ، 0x6a ، 0x2a ، 0x05 ، 0x2d ، 0x09 ، 0xaa ، 0x48 ، 0x5a ، 0x01 ، 0xb5 ، 0x05 ، 0x25 ، 0x75 ، 0x95 ، 0x0a ، 0x96 ، 0x04 ، 0x4d ، 0x54 ، 0xad ، 0x04 ، 0xda ، 0x04 ، 0xd4 ، 0x44 ، 0xb4 ، 0x05 ، 0x54 ، 0x85 ، 0x52 ، 0x0d ، 0x56 ، 0x6a ، 0x56 ، 0x02 ، 0x6a ، 0x41 ، 0xda ، 0x02 ، 0xb2 ، 0xa1 ، 0xa9 ، 0x05 ، 0x49 ، 0x0d ، 0x0a ، 0x6d ، 0x2a ، 0x09 ، 0x56 ، 0x01 ، 0x. 0xd9 ، 0x02 ، 0xd1 ، 0x3a ، 0xa8 ، 0x05 ، 0x29 ، 0x85 ، 0xa5 ، 0x0c ، 0x2a ، 0x09 ، 0x96 ، 0x54 ، 0xb6 ، 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 ، 0x2d ، 0x0a ، 0x5a ، 0x02 ، 0x75 ، 0x61 ، 0xb5 ، 0x02 ، 0x6a ، 0x03 ، 0x61 ، 0x45 ، 0xa9 ، 0x0a ، 0x4a ، 0x05 ، 0x25 ، 0x2d ، 0x09 ، 0x9a ، 0x68 ، 0x. 0xb4 ، 0x09 ، 0xa8 ، 0x59 ، 0x54 ، 0x03 ، 0xa5 ، 0x0a ، 0x91 ، 0x3a ، 0x96 ، 0x04 ، 0x44 ، 0x5d ، 0x52 ، 0x0a ، 0x95 ، 0x04 ، 0x55 ، 0x22 ، 0x6d ، 0x02 ، 0x5a ، 0x71 ، 0xda ، 0x02 ، 0xaa ، 0x05 ، 0xb2 ، 0x55 ، 0x49 0x39 ، 0x36 ، 0x01 ، 0x6d ، 0x80 ، 0x6d ، 0x01 ، 0xd9 ، 0x02 ، 0xe9 ، 0x6a ، 0xa8 ، 0x05 ، 0x29 ، 0x0b ، 0x9a ، 0x4c ، 0xaa ، 0x08 ، 0xb6 ، 0x6c ، 0x09 ، 0x54 ، 0x75 ، 0xd4 ، 0x0a ، 0xa4 ، 0x05 ، 0x45 ، 0x55 ، 0x95 ، 0x0a ، 0x9a ، 0x04 ، 0x55 ، 0x44 ، 0xb5 ، 0x04 ، 0x6a ، 0x82 ، 0x0a ، 0x92 ، 0x6a ، 0x4a ، 0x05 ، 0x55 ، 0x0a ، 0x2a ، 0x4a ، 0x5a ، 0x02 ، 0xb5 ، 0x02 ، 0x31 ، 0x69 ، 0x31 ، 0x73 ، 0xa9 ، 0x0a ، 0x4a ، 0x05 ، 0x. 0x2d ، 0x09 ، 0x5a ، 0x01 ، 0xd5 ، 0x48 ، 0xb4 ، 0x09 ، 0x68 ، 0x89 ، 0x54 ، 0x0b ، 0xa4 ، 0x0a ، 0xa5 ، 0x6a ، 0x95 ، 0x04 ، 0xad ، 0x08 ، 0x. 0x04 ، 0x74 ، 0x05 ، 0xb0 ، 0x25 ، 0x54 ، 0x03} ؛ سلسلة خاصة getChineseterm () {if (get (calendar.date) == get (inchane_sectional_term)) {return sectionalTermNames [get (calendar.month)] ؛ } آخر إذا (get (calendar.date) == get (invale_principle_term)) {return arginisterMnames [get (calendar.month)] ؛ } آخر عودة لاغية ؛ }. int month = get (invale_month) ؛ String Stoday = Day <10؟ "0" + اليوم: "" + يوم ؛ سلسلة smonth = الشهر <10؟ "0"+(الشهر): "+(شهر) ؛ إرجاع lfestival.get (smonth+stoday) ؛} سلسلة خاصة getSolarfestival () {int day = get (calendar.date) ؛ int month = get (calendar.month) ؛ String stoday = day <10؟ إرجاع sfestival.get (smonth+stoday) ؛ } سلسلة خاصة getFestIvalTerMordate () {String ret ؛ if ((ret = getSolarFestival ())! = null) return ret ؛ if ((ret = getLunArfestival ())! = null) return ret ؛ إرجاع getChinese (get (invale_term_or_date)) ؛ } // Gregorian Festival Private Static HashMap <String ، String> sfestival = new HashMap <string ، string> () ؛ // lunar تدخل خاص hashmap static <string ، string> lfestival = new hashmap <string ، string> () ؛ ثابت {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" ، "Army Day") ؛ sfestival.put ("0910" ، "يوم المعلم") ؛ sfestival.put ("1001" ، "اليوم الوطني") ؛ 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"); }}