การผลิตปฏิทินถาวรที่นี่ส่วนใหญ่ใช้คลาสปฏิทินและคลาส Gregoriancalendar ลองทบทวนพื้นฐานก่อน:
ชิ้นส่วนพื้นฐาน
1. คลาสปฏิทิน
1. ฟิลด์หลัก:
ปี (ปี), เดือน (เดือนเริ่มต้นที่ 0), วันที่ (วันมกราคม), ชั่วโมง (หมายถึงชั่วโมงในตอนเช้าหรือบ่าย), ชั่วโมง _f_day (ระบุชั่วโมงในวัน), day_of_week (ระบุจำนวนสัปดาห์ในสัปดาห์), day_of_month (หมายถึงจำนวนสัปดาห์ในปี) จำนวนสัปดาห์ในเดือน), Week_of_year (ระบุจำนวนสัปดาห์ในปี)
2. รับวัตถุคลาสปฏิทิน
// ผ่านวิธีการคงที่ getinstance ของคลาสปฏิทิน ปฏิทิน CA = Calendar.getInstance ();
3. วิธีการหลัก
Void Set (ฟิลด์ int, ค่า int) // พารามิเตอร์ของคลาสปฏิทินฟิลด์เช่นวันที่เดือนเดือน ฯลฯ .... Void Set (Int Year, Int Month, Int Date) // กำหนดปีเดือนและวัน Void Set (Int Year, Int Month, Int Date, Int Hourofday, Int Minute) // กำหนดปี, เดือน, วันชั่วโมงและนาที) // กำหนดปี, เดือน, วัน, ชั่วโมง, นาที, และ void settime ครั้งที่สอง (วันที่); // กำหนดเวลาของปฏิทินนี้ตามวันที่กำหนด int get (ฟิลด์ int) // ส่งคืนค่าของฟิลด์ปฏิทินที่กำหนด ตัวอย่างเช่น: int month = acobj.get (calendar.month); วันที่ getTime () // ส่งคืนวัตถุวันที่แทนค่าเวลาตามปฏิทิน Long GetTimeInmillis () // ส่งคืนจำนวนมิลลิวินาทีจาก 1970.1.1 00:00:00 ไปยังปฏิทิน โมฆะเพิ่ม (ฟิลด์ int, amont); // ตามกฎปฏิทินเพิ่มหรือลบจำนวนเวลาที่กำหนดสำหรับฟิลด์ปฏิทินที่กำหนด สามารถเพิ่มหรือลบออก ตัวอย่างเช่น: caobj.add (Calendar.month, 1) เดือนหน้า
2. คลาส Gregoriancalendar
1. รับวัตถุคลาสนี้
ปฏิทิน CA = New Gregoriancalendar () // ช่วงเวลาปัจจุบันเริ่มต้น ปฏิทิน CA = ใหม่ Gregoriancanlendar (ปี int, เดือน int, int dayofmonth) // เริ่มแรกวัตถุ Gregorian ที่มีปีที่กำหนดเดือนและวัน ปฏิทิน CA = ใหม่ Gregoriancanlendar (ปี int, เดือน int, int dayofmonth, int hourofday, int นาที) วัตถุชั้นเรียน Gregorian เริ่มต้นมีปีที่กำหนดเดือนและวัน ปฏิทิน CA = ใหม่ Gregoriancanlendar (ปี int, เดือน int, int dayofmonth, int hourofday, int นาที, int second) // เริ่มแรก, วัตถุชั้นเรียน Gregorian ที่มีปีที่กำหนดเดือนและวัน ข้างต้นทั้งหมดได้มาจากการได้รับตำแหน่งเริ่มต้นและวัตถุโซนเวลาเริ่มต้น
2. การใช้งานการใช้งานส่วนใหญ่สืบทอดปฏิทินชั้นเรียนหลัก
ส่วนตัวอย่าง
3. รหัสปฏิทินตลอดกาล
แพ็คเกจ com.via.mce.monthcalendar.utils; นำเข้า java.util.calendar นำเข้า java.util.date นำเข้า java.util.gregoriancalendar; นำเข้า Java.util.hashmap;/*** Lunar Calendar <br> * บันทึกขนาดของปีเดือนและคำศัพท์แสงอาทิตย์ก่อนหน้านี้ระหว่างปี 1901 และ 2100 ของปฏิทินจันทรคติจากนั้นคำนวณตามข้อมูลเหล่านี้ <br> * <br> * มีการเพิ่มฟิลด์แอตทริบิวต์คงที่สำหรับปฏิทินจันทรคติและคุณสามารถใช้วิธี Get () เพื่อรับค่าที่สอดคล้องกันของปฏิทิน; <br> * สามารถตั้งค่าปีปฏิทินเดือนเดือนและวันโดยใช้วิธีการตั้งค่า ()/เพิ่ม ()/ม้วน () และแอตทริบิวต์ปฏิทินจันทรคติอื่น ๆ จะถูกคำนวณโดยอัตโนมัติ <br> * นอกจากนี้ยังมีวิธีการ getchinese (int int) เพื่อให้ได้ข้อความภาษาจีนของปฏิทินจันทรคติ (ใช้เฉพาะกับแอตทริบิวต์ปฏิทินจันทรคติและสัปดาห์) <br> * <ul> * <li> Chinese_year - Lunar Year </li> * <li> Chinese_month - เดือนจันทรคติ </li> * <li> Chinese_date - Lunar Day </li> * <li> chinese_sectional_term - LIAL <LID LIS> ปีจันทรคติ </li> * <li> chinese_eardly_branch - สาขาบนโลกของปีจันทรคติ </li> * <li> chinese_zodiac - ราศีแห่งปีจันทรคติ </li> * <li> chinese_ter_date - หากมีคำศัพท์แสงอาทิตย์ในวันนั้น มิฉะนั้นถ้าวันนี้เป็นวันแรกของวันมันจะบ่งบอกถึงเดือนจันทรคติมิฉะนั้นจะบ่งบอกถึงวันจันทรคติ * </ul> * หมายเหตุ: <br> * เนื่องจากการตั้งค่าคลาสปฏิทินเดือน Gregorian เริ่มต้นจาก 0 วิธีทั้งหมดติดตามการประชุมนี้ <br> * แต่แอตทริบิวต์จันทรคติทั้งหมดเริ่มต้นจาก 1 แม้ในวิธีการที่ได้รับจากปฏิทินเดือนจันทรคติเริ่มต้นด้วย 1 และแสดงถึงเดือนกระโดดด้วยจำนวนลบ <br> * วิธีการที่ชัดเจน () จะทำให้ปฏิทินจันทรคติและวันที่ปฏิทิน Gregorian ไม่สอดคล้องกันหรือไม่สามารถรีเซ็ตผลที่คาดหวังได้ ควรหลีกเลี่ยงมากที่สุด <br> * เมื่อใช้ GetSimpledatestring () เพื่อรับสตริงวันที่ Gregorian ปฏิทินวันที่ Gregorian เดือนปฏิทินได้รับการแก้ไขแล้ว <br> * เมื่อใช้ GetSimplechinesedateString () เพื่อรับสตริงวันที่ตามปฏิทินจันทรคติเดือน Lunar Leap Month แสดงโดย * <br> * * @version 0.12 2011-9-5 <br> * <blockquote> แก้ไขปัญหาที่ปฏิทินถูกขังอยู่ในรอบตายเมื่อเริ่มต้นปฏิทินโดยใช้เดือนแรกของปฏิทินจันทรคติ </blockquote> * @version 0.11 2009-12-27 <br> * <blockquote> แก้ไขปัญหาที่ปฏิทินจันทรคติไม่ได้คำนวณเมื่อได้รับปฏิทินจันทรคติจีน <br> * เพิ่มฟิลด์ Chinese_term_or_date เพื่อเลียนแบบวิธีการแสดงผลของปฏิทินโต๊ะ: หากมีคำศัพท์พลังงานแสงอาทิตย์ในวันนั้นมันบ่งบอกถึงคำศัพท์แสงอาทิตย์หากเป็นวันแรกของเดือนจันทรคติ * มิฉะนั้นจะบ่งบอกถึงวันจันทรคติ </blockquote> * @version 0.10 2009-12-22 */ชั้นสุดท้ายของ Public Chinesecalendar ขยาย Gregoriancalendar {ส่วนตัวคงที่สุดท้าย Long SerialVersionuid = 8L; / ** ปีจันทรคติ*/ สาธารณะคงที่ int int chleines_year = 801; / ** เดือนจันทรคติ*/ สาธารณะคงที่ int int chinese_month = 802; / ** วันจันทรคติ*/ สาธารณะคงที่ int int chleines_date = 803; / ** วัน Gregorian ที่สอดคล้องกับระยะเวลาแสงอาทิตย์ของเดือน (คำศัพท์พลังงานแสงอาทิตย์ก่อนหน้า)*/ สาธารณะคงที่ int int chinese_sectional_term = 804; / ** วัน Gregorian ที่สอดคล้องกับระยะเวลาแสงอาทิตย์ของเดือน (คำศัพท์พลังงานแสงอาทิตย์ถัดไป)*/ สาธารณะคงที่สาธารณะ int chinese_principle_term = 805; / ** ลำต้นสวรรค์*/ สาธารณะคงที่ int int chinese_heavenly_stem = 806; / ** กิ่งก้านของโลก*/ สาธารณะคงที่สุดท้าย int chinese_eardly_branch = 807; / ** สัญญาณราศี (สัญญาณราศี)*/ สาธารณะคงที่สุดท้าย int chinese_zodiac = 808; / ** คำศัพท์แสงอาทิตย์หรือวันจันทรคติ*/ สาธารณะคงที่สุดท้าย int chinese_term_or_date = 888; // เพิ่มโดย Skywang/ ** Lunar Festival*/ สาธารณะคงที่สุดท้าย Int Lunar_festival = 809; / ** คำศัพท์พลังงานแสงอาทิตย์*/ สาธารณะคงสุดท้าย int solar_festival = 810; / ** คำศัพท์แสงอาทิตย์*/ สาธารณะคงที่สุดท้าย int chinese_term = 811; / ** เดือนหรือวันจันทรคติ*/ สาธารณะคงที่ int int chinese_month_or_date = 812; / ** เทศกาลหรือเทอมพลังงานแสงอาทิตย์หรือวันจันทรคติ*/ สาธารณะคงที่ขั้นสุดท้าย int festival_or_term_or_date = 813; ส่วนตัวในภาษาจีน INT CHINESONTH ส่วนตัว; // เริ่มต้นด้วย 1 ตัวเลขติดลบแสดงถึงการก้าวกระโดดของ chinesedate ส่วนตัว ส่วนบุคคลส่วนตัว // Gregorian Day Private Int Principleterm; // Gregorian Day Private Boolean เป็น Chinesefieldscputed; // ไม่ว่าจะเป็นวันที่จันทรคติที่ได้รับการคำนวณและยืนยันว่าบูลีนส่วนตัว aresolartermscomputed; // ไม่ว่าจะเป็นคำศัพท์แสงอาทิตย์และยืนยันบูลีนส่วนตัวล่าสุดหรือไม่ // เป็นการตั้งค่าสุดท้ายของแอตทริบิวต์ Lunar/** สร้างอินสแตนซ์โดยใช้เวลาปัจจุบัน */ Public Chinesecalendar () {super (); } /** สร้างอินสแตนซ์โดยใช้เวลาที่กำหนด */ Public Chinesecalendar (วันที่ d) {super.settime (d); } /** สร้างอินสแตนซ์โดยใช้เวลาที่กำหนด */ Public Chinesecalendar (ปฏิทิน C) {this (c.getTime ()); } /** สร้างอินสแตนซ์โดยใช้วันที่ Gregorian ที่ระบุ */ Public Chinesecalendar (int y, int m, int d) {super (y, m, d); } /*** สร้างอินสแตนซ์ด้วยวันที่ที่ระบุ * * @param ischinese * เป็นวันที่จันทรคติ * @param y * @param m * @param d */ public chinesecalendar (บูลีน ischinese, int y, int m, int d) {ถ้า (ischinese) {set (chinese_year, y); SET (Chinese_month, M); SET (Chinese_date, D); } else {set (y, m, d); }} ชุดโมฆะสาธารณะ (ฟิลด์ int, ค่า int) {computeifneed (ฟิลด์); if (ischinesefield (ฟิลด์)) {// สวิตช์แอตทริบิวต์ปฏิทินจันทรคติ (ฟิลด์) {case chinese_year: chinesyear = value; หยุดพัก; CASE CHINESE_MONTH: Chinesemonth = ค่า; หยุดพัก; กรณี chinese_date: chinesedate = ค่า; หยุดพัก; ค่าเริ่มต้น: โยน unlegalargumentException ใหม่ ("การตั้งค่าฟิลด์ที่ไม่ได้รับการสนับสนุน:" + ฟิลด์); } lastSetchInese = true; } else {// แอตทริบิวต์ปฏิทินที่ไม่ใช่ lunar super.set (ฟิลด์ค่า); LastSetchinese = FALSE; } arefieldsset = false; ArechinesefieldScomputed = FALSE; aresolartermscomputed = false; } public int get (ฟิลด์ int) {computeifneed (ฟิลด์); if (! ischinesefield (ฟิลด์)) {return super.get (ฟิลด์); } switch (ฟิลด์) {case Chinese_year: กลับ Chinesyear; กรณี Chinese_month: กลับ Chinesemonth; กรณี chinese_date: return chinesedate; กรณี chinese_sectional_term: return sectionalterm; กรณี Chinese_principle_term: Return PrincipleTerm; CASE CHIENE_HEAVENLY_STEM: RETURN (CHINESTICYEAR - 4) % 10 + 1; กรณี Chinese_earthly_branch: Case Chinese_zodiac: return (Chinesyear - 4) % 12 + 1; กรณี chinese_month_or_date: ถ้า (รับ (chinese_date) == 1) {return chinese_month; } else {return Chinese_date; } case chinese_term_or_date: ตัวเลือก int; if (get (calendar.date) == get (chinese_sectional_term)) {ตัวเลือก = Chinese_sectional_term; } อื่นถ้า (get (calendar.date) == get (chinese_principle_term)) {ตัวเลือก = Chinese_principle_term; } อื่นถ้า (get (chinese_date) == 1) {opption = chinese_month; } else {option = chinese_date; } ตัวเลือกการส่งคืน; ค่าเริ่มต้น: โยน unlegalargumentException ใหม่ ("ฟิลด์ที่ไม่ได้รับการสนับสนุนรับ:" + ฟิลด์); }} โมฆะสาธารณะเพิ่ม (ฟิลด์ int, จำนวน int) {computeifneed (ฟิลด์); if (! ischinesefield (ฟิลด์)) {super.add (ฟิลด์จำนวน); LastSetchinese = FALSE; ArechinesefieldScomputed = FALSE; aresolartermscomputed = false; กลับ; } switch (ฟิลด์) {case chinese_year: chinesyear += จำนวน; หยุดพัก; กรณี chinese_month: สำหรับ (int i = 0; i <จำนวน; i ++) {chinesemonth = nextchinesemonth (Chinesyear, chinesemonth); if (chinesemonth == 1) {CHINESTICYEAR ++; } } หยุดพัก; Case Chinese_date: int maxdate = daysinchinesemonth (Chinesyear, Chinesemonth); สำหรับ (int i = 0; i <จำนวน; i ++) {chinesedate ++; if (chinesedate> maxdate) {chinesedate = 1; chinesemonth = nextchinesemonth (Chinesyear, Chinesemonth); if (chinesemonth == 1) {CHINESTICYEAR ++; } maxdate = daysinchinesemonth (Chinesyear, Chinesemonth); }} ค่าเริ่มต้น: โยน unlegalargumentException ใหม่ ("ฟิลด์ที่ไม่ได้รับการสนับสนุน:" + ฟิลด์); } lastSetchInese = true; arefieldsset = false; ArechinesefieldScomputed = FALSE; aresolartermscomputed = false; } โมฆะสาธารณะม้วน (ฟิลด์ int จำนวน int) {computeIfneed (ฟิลด์); if (! ischinesefield (ฟิลด์)) {super.roll (ฟิลด์จำนวน); LastSetchinese = FALSE; ArechinesefieldScomputed = FALSE; aresolartermscomputed = false; กลับ; } switch (ฟิลด์) {case chinese_year: chinesyear += จำนวน; หยุดพัก; กรณี chinese_month: สำหรับ (int i = 0; i <จำนวน; i ++) {chinesemonth = nextchinesemonth (Chinesyear, chinesemonth); } หยุดพัก; Case Chinese_date: int maxdate = daysinchinesemonth (Chinesyear, Chinesemonth); สำหรับ (int i = 0; i <จำนวน; i ++) {chinesedate ++; if (chinesedate> maxdate) {chinesedate = 1; }} ค่าเริ่มต้น: โยน unlegalargumentException ใหม่ ("ฟิลด์ที่ไม่ได้รับการสนับสนุน:" + ฟิลด์); } lastSetchInese = true; arefieldsset = false; ArechinesefieldScomputed = FALSE; aresolartermscomputed = false; } /*** รับภาษาจีนของแอตทริบิวต์ฟิลด์แอตทริบิวต์ที่สามารถใช้งานได้คือ day_of_week และฟิลด์แอตทริบิวต์จันทรคติทั้งหมด * * ฟิลด์ @param * @return */ สตริงสาธารณะ getchinese (ฟิลด์ int) {computeifneed (ฟิลด์); สวิตช์ (ฟิลด์) {case chinese_year: กลับ getchinese (chinese_heavenly_stem) + getchinese (chinese_earthly_branch) + "ปี"; กรณี Chinese_month: ถ้า (chinesemonth> 0) return chinesemonthnames [chinesemonth] + "เดือน"; อื่น ๆ กลับ "leap" + chinesemonthnames [-Chinesemonth] + "เดือน"; กรณี chinese_date: return chinesedatenames [chinesedate]; กรณี chinese_sectional_term: return sectionmnames [get (calendar.month)]; กรณี Chinese_principle_term: Return PrincipleTermnames [รับ (Calendar.month)]; กรณี chinese_heavenly_stem: return stemnames [รับ (ฟิลด์)]; กรณี chinese_earthly_branch: return branchnames [รับ (ฟิลด์)]; กรณี chinese_zodiac: return imentname [get (field)]; case calendar.day_of_week: return chineseweeknames [รับ (ฟิลด์)]; กรณี chinese_term_or_date: กลับ getchinese (รับ (chinese_term_or_date)); Case Lunar_festival: กลับ getlunarfestival (); Case Solar_festival: return getSolarfestival (); Case Festival_or_term_or_date: return getFestivalOrtermordate (); // todo ตรวจสอบกรณี chinese_month_or_date: ส่งคืน getchinese (รับ (chinese_month_or_date)); กรณี chinese_term: ส่งคืน getchineseterm (); ค่าเริ่มต้น: โยน unlegalargumentException ใหม่ ("ฟิลด์ที่ไม่ได้รับการสนับสนุนภาษาจีนได้รับ:" + ฟิลด์); }} สตริงสาธารณะ GetSimpleGregregoriandAtestring () {ส่งคืน StringBuffer ใหม่ (). ผนวก (รับ (ปี)). ภาคผนวก ("-") .append (รับ (เดือน) + 1) .append ("-"). ผนวก } Public String GetSimpleChinesedAtestring () {ส่งคืน StringBuffer ใหม่ () .Append (รับ (chinese_year)) .append ("-") .append (get (chinese_month)> 0? "" get (chinese_month): "*" } สตริงสาธารณะ getChinesedatestring () {ส่งคืน StringBuffer ใหม่ (). ผนวก (getchinese (chinese_year)) .append (getchinese (chinese_month)) .append (getchinese (chinese_date)). toString (); } public String toString () {StringBuffer buf = new StringBuffer (); buf.append (getSimplegregregoriandatestring ()). ต่อ ("|") .append (getchinese (day_of_week)) ผนวก ("| [Lunar Calendar]") .append (รับ (chinese_sectional_term)) ผนวก ("วัน") .append (getchinese (chinese_sectional_term)) ผนวก ("") .append (get (chinese_principle_term)) ผนวก ("วัน") return buf.toString (); } / ** * ตรวจสอบว่าเป็นแอตทริบิวต์ทางจันทรคติ * * @param ฟิลด์ * @return * / บูลีนส่วนตัว ischinesefield (ฟิลด์ int) {สวิตช์ (ฟิลด์) {กรณี chinese_year: case chinese_month: case chinese_date: case chinese_sectional_term: case chinese_principle_term Chinese_term_or_date: case chinese_month_or_date: return true; ค่าเริ่มต้น: return false; }} / ** * พิจารณาว่าเป็นแอตทริบิวต์ที่เกี่ยวข้องกับคำศัพท์แสงอาทิตย์ * * @param ฟิลด์ * @return * / บูลีนส่วนตัว ischinesetermsfield (ฟิลด์ int) {สวิตช์ (ฟิลด์) {case chinese_sectional_term: case chines_principle_term ค่าเริ่มต้น: return false; }} /** * หากแอตทริบิวต์ที่ตั้งไว้ในครั้งสุดท้ายไม่เหมือนกับแอ็ตทริบิวต์ที่จะตั้งค่าหรือได้รับในเวลานี้ (ปฏิทินจันทรคติ /ปฏิทิน Gregorian), <br> * ตัวอย่างเช่นครั้งสุดท้ายที่ฉันตั้งค่าปฏิทินจันทรุป * * ฟิลด์ @param */ โมฆะส่วนตัว computeifneed (ฟิลด์ int) {if (ischinesefield (ฟิลด์)) {ถ้า (! Lastsetchinese &&! arechinesefieldscomputed) {super.complete (); Computechinesefields (); arefieldsset = true; ArechinesefieldScomputed = true; aresolartermscomputed = false; } if (ischinesetermsfield (ฟิลด์) &&! aresolartermscomputed) {computesolarterms (); aresolartermscomputed = true; }} else {ถ้า (LastSetchInese &&! arefieldsSet) {ComputeGregorianFields (); super.complete (); arefieldsset = true; ArechinesefieldScomputed = true; aresolartermscomputed = false; }}} / *** ใช้วันที่จันทรคติเพื่อคำนวณ gregoriandate* / โมฆะส่วนตัว computeGregregelialfields () {int y = chinesyear; int m = chinesemonth; int d = chinesedate; ArechinesefieldScomputed = true; arefieldsset = true; LastSetchinese = FALSE; // ปรับช่วงวันที่ถ้า (y <1900) y = 1899; อื่นถ้า (y> 2100) y = 2101; ถ้า (M <-12) M = -12; อื่นถ้า (m> 12) m = 12; ถ้า (d <1) d = 1; อื่นถ้า (d> 30) d = 30; int dateint = y * 10,000 + math.abs (m) * 100 + d; if (dateint <19001111) {// ชุดเล็กเกินไป (1901, calendar.january, 1); super.complete (); } อื่นถ้า (วันที่> 21001201) {// ชุดใหญ่เกินไป (2100, ปฏิทิน. ธันวาคม, 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); } ถ้า (d> วัน) {d = วัน; } set (y, math.abs (m) - 1, d); Computechinesefields (); จำนวน int = 0; ในขณะที่ (chinesyear! = y || chinesemonth! = m) {จำนวน += daysinchinesemonth (chinesyear, chinesemonth); chinesemonth = nextchinesemonth (Chinesyear, Chinesemonth); if (chinesemonth == 1) {CHINESTICYEAR ++; }} จำนวน += d - chinesedate; super.add (Calendar.date, จำนวนเงิน); } computechinesefields (); } / *** คำนวณวันที่ปฏิทินจันทรคติโดยใช้วันที่ Gregorian* / โมฆะส่วนตัว Computechinesefields () {int gregorianyear = internalget (ปฏิทิน. ปี); int gregorianmonth = internalget (ปฏิทิน 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 = ตาม; CHINESSYEAR = Basechineseyear; chinesemonth = basechinesemonth; chinesedate = basechinesedate; } else {// วันที่สองที่สอดคล้องกันใช้เพื่อปรับปรุงประสิทธิภาพการคำนวณ // 1 มกราคม 2000, ปฏิทินจันทรคติที่สอดคล้องกัน 4697 (1999), startyear = baseyear + 99; StartMonth = 1; startdate = 1; CHINESSYEAR = Basechineseyear + 99; chinesemonth = 11; chinesedate = 25; } int daysdiff = 0; // ปีสำหรับ (int i = startyear; i <gregorianyear; i ++) {ถ้า (isgregorianleapyear (i)) {daysdiff+= 366; // ปีกระโดด} else {daysdiff += 365; }} // เดือนสำหรับ (int i = startMonth; i <gregorianmonth; i ++) {daysdiff+= dayingRegorianMonth (Gregorianyear, i - 1); } // daydaysdiff += gregoriandate - startdate; chinesedate += daysdiff; int lastdate = daysinchinesemonth (Chinesyear, Chinesemonth); ในขณะที่ (chinesedate> lastDate) {chinesedate -= lastDate; chinesemonth = nextchinesemonth (Chinesyear, Chinesemonth); if (chinesemonth == 1) {CHINESTICYEAR ++; } lastDate = DaysInchinesemonth (CHINESTICYEAR, Chinesemonth); }} / *** คำนวณคำศัพท์พลังงานแสงอาทิตย์* / โมฆะส่วนตัว Computesolarterms () {int gregorianyear = internalGet (Calendar.year); int gregorianmonth = internalget (calendar.month); if (Gregorianyear <1901 || Gregorianyear> 2100) {return; } SectionAlterm = SectionAlterm (Gregorianyear, GregorianMonth); PrincipleTerm = Principalterm (Gregorianyear, GregorianMonth); } / * ถัดไปเป็นวิธีการคงที่ ~ * / / ** * มันเป็นปีที่ก้าวกระโดดในปี Gregorian * * @param ปี * @return * / บูลีนคงที่สาธารณะ isgregorianleapyear (int ปี) {บูลีน isleap = false; ถ้า (ปี % 4 == 0) {isleap = true; } ถ้า (ปี % 100 == 0) {isleap = false; } ถ้า (ปี % 400 == 0) {isleap = true; } return isleap; } /*** คำนวณจำนวนวันในปีเกรกอเรียนและเดือนเกรกอเรียนเริ่มต้นที่ 0! * * @param y * @param m * @return */ สาธารณะคงที่ int dayingregorianmonth (int y, int m) {int d = dayingregorianmonth [m]; if (m == ปฏิทินเดือนกุมภาพันธ์ && isgregorianleapyear (y)) {d ++; // อีกหนึ่งวันในปีกระโดดในปีเกรกอเรียน} return d; } /*** คำนวณเงื่อนไขแสงอาทิตย์ของเดือน Gregorian เดือน Gregorian เริ่มต้นตั้งแต่ 0! * * @param y * @param m * @return */ สาธารณะคงที่ int sectionalterm (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseyear + 1; ในขณะที่ (ry> = sectionaltertermyear [m - 1] [index]) {index ++; } int term = sectionaltermmap [m - 1] [4 * ดัชนี + ry % 4]; if ((ry == 121) && (m == 4)) {term = 5; } if ((ry == 132) && (m == 4)) {term = 5; } if ((ry == 194) && (m == 6)) {term = 6; } คำกลับ; } /*** คำนวณ Zhongqi ของปี Gregorian และเดือน Gregorian เริ่มต้นตั้งแต่ 0! * * @param y * @param m * @return */ principleterm int คงที่สาธารณะ (int y, int m) {m ++; if (y <1901 || y> 2100) {return 0; } int index = 0; int ry = y - baseyear + 1; ในขณะที่ (ry> = principleTermyear [m - 1] [index]) {index ++; } int term = principaltermmap [m - 1] [4 * ดัชนี + ry % 4]; if ((ry == 171) && (m == 3)) {term = 21; } if ((ry == 181) && (m == 5)) {term = 21; } คำกลับ; } / ** * คำนวณจำนวนวันในปีจันทรคติ * * @param y * @param m * @return * / สาธารณะคงที่ int daysinchinesemonth (int y, int m) {// note: กระโดดเดือน m <0 int index = y - basechinesyear + baseindex; int v = 0; int l = 0; int d = 30; if (1 <= m && m <= 8) {v = chinesemonths [2 * ดัชนี]; l = m - 1; if (((v >> l) & 0x01) == 1) {d = 29; }} อื่นถ้า (9 <= m && m <= 12) {v = chinesemonths [2 * ดัชนี + 1]; l = m - 9; if (((v >> l) & 0x01) == 1) {d = 29; }} else {v = chinesemonths [2 * ดัชนี + 1]; v = (v >> 4) & 0x0f; if (v! = math.abs (m)) {d = 0; } else {d = 29; สำหรับ (int i = 0; i <bigleapmonthyears.length; i ++) {ถ้า (bigleapmonthyears [i] == ดัชนี) {d = 30; หยุดพัก; }}}} return d; } / ** * คำนวณเดือนถัดไปของปฏิทินจันทรคติ * * @param y * @param m * @return * / สาธารณะคงที่ int nextchinesemonth (int y, int m) {int n = math.abs (m) + 1; if (m> 0) {int index = y - basechineseyear + baseIndex; int v = chinesemonths [2 * ดัชนี + 1]; v = (v >> 4) & 0x0f; if (v == m) {n = -m; }} ถ้า (n == 13) {n = 1; } return n; } /* วันที่ของวันแรกของปฏิทิน* / ส่วนตัวคงที่ int baseyear = 1901; INT int สุดท้ายคงที่ส่วนตัว = 1; การตั้งค่า int สุดท้ายคงที่ส่วนตัว = 1; INT INTINGENTENTIVE ส่วนตัว = 0; เอกชนคงสุดท้าย int basechineseyear = 1900; private static final int basechinesemonth = 11; INT int basechinesedate = 11; /* สตริงภาษาจีน*/ สตริงสุดท้ายคงที่ส่วนตัว [] chineseweeNnames = {"", "วันอาทิตย์", "วันจันทร์", "วันอังคาร", "วันพฤหัสบดี", "วันศุกร์", "วันเสาร์"}; สตริงสุดท้ายคงที่ส่วนตัว [] chinesemonthNames = {"", "First", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Ten", "Eleven", "Twelve"}; สตริงสุดท้ายคงที่ส่วนตัว [] chinesedatenames = {"", "First", "First", "Fourth", "Five", "Sixth", "เจ็ด", "Eighth", "Nine", "Nine", "Tenth", "Tenth", "Tenth" "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth", "Tenth" สตริงสุดท้ายคงที่ส่วนตัว [] PrincipleTermNames = {"Great Cold", "Rain Water", "Spring Equinox", "Green Rain", "Summer Solar", "Green Summer", "Green Summer", "Green Summer", "Green Summer", "Summer Solar", "Green Summer" สตริงสุดท้ายคงที่ส่วนตัว [] SectionStermnames = {"Little Cold", "Bird Spring", "Jingzhe", "Qingming", "เริ่มต้นฤดูร้อน", "เมล็ดพืช", "ความร้อนน้อย", "นกในฤดูใบไม้ร่วง", "น้ำค้างสีขาว", "น้ำค้างเย็น", สตริงสุดท้ายคงที่ส่วนตัว [] stemnames = {"", "Jia", "Yi", "Bing", "Ding", "Wu", "Ji", "Geng", "Xin", "Ren", "Gui"}; สตริงสุดท้ายคงที่ส่วนตัว [] branchnames = {"", "zi", "ug", "yin", "mao", "chen", "si", "wu", "shen", "you", "xu", "hai"}; สตริงสุดท้ายคงที่ส่วนตัว [] imentNames = {"", "หนู", "วัว", "ไทเกอร์", "กระต่าย", "มังกร", "งู", "ม้า", "แกะ", "ลิง", "ไก่", "สุนัข", "หมู"}; / * ถัดไปคือตารางการบีบอัดข้อมูล ~ */ ส่วนตัวคงที่ int [] bigleapmonthyears = {6, 14, 19, 25, 33, 36, 38, 41, 44, 52, 55, 79, 117, 136, 147, 150, 155, 158, 185, 193}; ถ่านสุดท้ายคงที่ [] [] sectionaltermmap = {{7, 6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5, 5}, {5, 4, 5, 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, 6, 5, 5, 6, 6, 5, 5, 5, 6, 5, 5, 5, 5, 5, 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, 7, 6, 6, 6, 6, 6, 5, 6, 6, 6, 5, 5, 6, 6, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 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, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 9, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 8, 7, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 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, 7}}; ถ่านสุดท้ายคงที่ [] [] SectionAltermyear = {{13, 49, 85, 117, 149, 185, 201, 250, 250}, {13, 45, 81, 117, 149, 185, 201, 250}, {13, 48, 84, 112, 148, 184 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}, {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 ถ่านสุดท้ายคงที่ [] [] PrincipleTermMap = {{21, 21, 21, 21, 21, 20, 21, 21, 21, 20, 20, 21, 21, 21, 20, 20, 20, 20, 20, 20, 20, 20, 19, 20, 20, 19, 19, 19, 19, 20}, {20, 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, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 20, 20, 21, 21, 20, 20, 20, 21, 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, 21, 21, 21, 21, 21, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 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, 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, 24, 23, 24, 24, 23, 23, 23, 24, 23, 23, 23, 24, 24, 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, 23, 22, 23, 23, 23, 22, 23, 23, 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, 21, 22}}; ถ่านสุดท้ายคงที่ [] [] principleTermyear = {{13, 45, 81, 113, 149, 185, 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}, {29, 57, 89, 120, 148, 180, 200, 201 124, 160, 192, 200, 201}, {16, 44, 80, 112, 148, 180, 200, 201}, {17, 53, 88, 120, 156, 188, 200, 201}}; ถ่านสุดท้ายคงที่ [] DayingRegorianMonth = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31}; ถ่านสุดท้ายคงที่ [] chinesemonths = {0x00, 0x04, 0xad, 0x08, 0x5a, 0x01, 0xd5, 0x54, 0xb4, 0x09, 0x64, 0x05, 0x59 0xad, 0x08, 0x5a, 0x62, 0xda, 0x04, 0xb4, 0x05, 0xb4, 0x55, 0x52, 0x0d, 0x94, 0x0a, 0x4a, 0x2a, 0x56 0x02, 0xd2, 0x52, 0xa9, 0x05, 0x49, 0x0d, 0x2a, 0x45, 0x2b, 0x09, 0x56, 0x01, 0xb5, 0x20, 0x6d, 0x59 0xa9, 0x56, 0xa5, 0x04, 0x2b, 0x09, 0x9e, 0x38, 0xb6, 0x08, 0xcec, 0x74, 0x6c, 0x05, 0x05, 0x055 0x42, 0x5b, 0x04, 0xb6, 0x04, 0xb4, 0x22, 0x6a, 0x05, 0x52, 0x75, 0xc9, 0x0a, 0x52, 0x55 0xb5, 0x02, 0x6a, 0x8a, 0x68, 0x05, 0xa9, 0x0a, 0x8a, 0x6a, 0x2a, 0x05, 0x2d, 0x09, 0x48, 0x48 0x05, 0x25, 0x75, 0x95, 0x0a, 0x96, 0x04, 0x4d, 0x54, 0xad, 0x04, 0xda, 0x04, 0x52, 0x5244 0x56, 0x6a, 0x56, 0x02, 0x6a, 0x41, 0xda, 0x02, 0xb2, 0xa1, 0xa9, 0x05, 0x49, 0x05d, 0x6d, 0x6d 0xd9, 0x02, 0xd1, 0x3a, 0xa8, 0x05, 0x29, 0x85, 0xa5, 0x0c, 0x2a, 0x09, 0x96, 0x54, 0xb6, 0x08, 0x6c 0x05, 0x51, 0x25, 0x95, 0x0a, 0x2a, 0x72, 0x5b, 0x04, 0xb6, 0x04, 0xac, 0x52, 0x4a, 0x05 0x2d, 0x0a, 0x5a, 0x02, 0x75, 0x61, 0xb5, 0x02, 0x6a, 0x03, 0x61, 0x45, 0xa9, 0x0a, 0x4a, 0x05, 0x25, 0x25, 0x25 0xb4, 0x09, 0xa8, 0x59, 0x54, 0x03, 0xa5, 0x0a, 0x91, 0x3a, 0x96, 0x04, 0xaD, 0xb0, 0x6, 0x04 0x44, 0x5d, 0x52, 0x0a, 0x95, 0x04, 0x55, 0x22, 0x6d, 0x02, 0x5a, 0x71, 0xda, 0x02, 0x05, 0x05 0x39, 0x36, 0x01, 0x6d, 0x80, 0x6d, 0x01, 0xd9, 0x02, 0xe9, 0x6a, 0xa8, 0x05, 0x29, 0x0b, 0x9a, 0x4c 0x6c, 0x09, 0x54, 0x75, 0xd4, 0x0a, 0xa4, 0x05, 0x45, 0x55, 0x95, 0x0a, 0x9a, 0x04, 0x55, 0x44, 0xb5 0x0a, 0x92, 0x6a, 0x4a, 0x05, 0x55, 0x0a, 0x2a, 0x4a, 0x5a, 0x02, 0xb5, 0x02, 0x31, 0x31, 0x35 0x2d, 0x09, 0x5a, 0x01, 0xd5, 0x48, 0xb4, 0x09, 0x68, 0x89, 0x54, 0x0b, 0xa4, 0x0a, 0x6a, 0x6A 0x04, 0x74, 0x05, 0xb0, 0x25, 0x54, 0x03}; สตริงส่วนตัว getChineseterm () {ถ้า (get (calendar.date) == get (chinese_sectional_term)) {return sectionaltermnames [get (calendar.month)]; } อื่นถ้า (get (calendar.date) == get (chinese_principle_term)) {return principleTermNames [get (calendar.month)]; } else return null; } // เพิ่มโดย Skywang Private String getLunarFestival () {int day = get (chinese_date); int month = get (chinese_month); String Stoday = Day <10? "0" + วัน: "" + วัน; String smonth = เดือน <10? "0"+(เดือน): "+(เดือน); return lfestival.get (smonth+stoday);} สตริงส่วนตัว getSolarfestival () {int day = get (calendar.date); int month = get (calendar.month); String stoday = วัน <10? return sfestival.get (Smonth+Stoday); } สตริงส่วนตัว getFestivalOrterTerate () {string ret; if ((ret = getSolarFestival ())! = null) return ret; if ((ret = getLunarFestival ())! = null) return ret; กลับ getchinese (รับ (chinese_term_or_date)); } // Gregorian Festival HashMap แบบคงที่ส่วนตัว <String, String> Sfestival = new HashMap <String, String> (); // lunar internedere private static hashmap <string, string> lfestival = new hashmap <string, string> (); คงที่ {sfestival.put ("0101", "วันปีใหม่"); sfestival.put ("0214", "วันวาเลนทีน"); 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"); -