Java จัดเตรียมคลาสวันที่ในแพ็คเกจ java.util ซึ่งห่อหุ้มวันที่และเวลาปัจจุบัน
คลาสวันที่รองรับสองตัวสร้าง ตัวสร้างแรกเริ่มต้นวันที่และเวลาปัจจุบันของวัตถุ
วันที่( )
ตัวสร้างต่อไปนี้ได้รับพารามิเตอร์เท่ากับจำนวนมิลลิวินาทีตั้งแต่เที่ยงคืนของวันที่ 1 มกราคม 1970
วันที่ (ยาวมิลลิส)
เมื่อมีวัตถุวันที่ที่มีอยู่แล้วคุณสามารถเรียกใช้วิธีการใด ๆ ที่รองรับต่อไปนี้เพื่อใช้เวลา:
| SN | วิธีการและคำอธิบาย |
|---|---|
| 1 | บูลีนหลังจาก (วันที่) ส่งคืนจริงถ้าวัตถุวันที่โทรมีหรือช้ากว่าวันที่ที่ระบุมิฉะนั้นส่งคืนเท็จ |
| 2 | บูลีนก่อน (วันที่) ส่งคืนจริงถ้าวัตถุวันที่โทรมีหรือเร็วกว่าวันที่ที่ระบุตามวันที่มิฉะนั้นจะส่งคืนเท็จ |
| 3 | Object Clone () โทรซ้ำไปยังวัตถุวันที่ |
| 4 | int compareto (วันที่) เปรียบเทียบค่าของวัตถุการโทรกับวันที่ หากค่าทั้งสองนี้เท่ากันให้ส่งคืน 0. ส่งคืนค่าลบหากวัตถุการโทรเร็วกว่าวันที่ ส่งคืนค่าบวกหากวัตถุการโทรช้ากว่าวันที่ |
| 5 | int compereto (Object OBJ) ใช้การดำเนินการเปรียบเทียบ (วันที่) เดียวกันหาก OBJ เป็นวันที่คลาส มิฉะนั้นมันจะโยน ClassCastException |
| 6 | บูลีนเท่ากับ (วันที่วัตถุ) ส่งคืนจริงถ้าวัตถุวันที่โทรมีเวลาและวันที่ที่ระบุไว้ในเวลาเดียวกันมิฉะนั้นจะส่งคืนเท็จ |
| 7 | GetTime นาน () ส่งคืนจำนวนมิลลิวินาทีที่ผ่านมาตั้งแต่วันที่ 1 มกราคม 1970 |
| 8 | int hashcode () ส่งคืนรหัสแฮชของวัตถุที่เรียก |
| 9 | เป็นโมฆะ settime (นาน) กำหนดเวลาที่กำหนดซึ่งแสดงถึงเวลาที่ผ่านไปเป็นมิลลิวินาทีจากเที่ยงคืนของวันที่ 1 มกราคม 1970 |
| 10 | สตริง toString () เรียกวัตถุวันที่เพื่อแปลงเป็นสตริงและส่งคืนผลลัพธ์ |
นำเข้า java.util.date; คลาสสาธารณะวันที่ DateMo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// อินสแตนซ์วันที่วัตถุวันที่วันที่ = วันที่ใหม่ (); // แสดงเวลาและวันที่โดยใช้ toString () system.out.println (date.toString ()); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
จันทร์ 04 พฤษภาคม 09:51:52 CDT 2009
การเปรียบเทียบวันที่
มีสามวิธีในการเปรียบเทียบสองวัน:
รูปแบบวันที่โดยใช้ SimpleDateFormat
SimpledateFormat เป็นคลาสคอนกรีตที่ใช้ในเครื่องสำหรับการจัดรูปแบบและการแปลงวันที่ SimpledateFormat ช่วยให้การเลือกสคีมาที่ผู้ใช้กำหนดไว้จนถึงปัจจุบันและรูปแบบเวลา ตัวอย่างเช่น:
นำเข้า java.util.*; นำเข้า Java.Text.*; คลาสสาธารณะ dateMo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {วันที่ dnow = วันที่ใหม่ (); SimpledateFormat ft = new SimpledateFormat ("e yyyy.mm.dd 'ที่' HH: MM: SS A zzz"); System.out.println ("วันที่ปัจจุบัน:" + ft.format (dnow)); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
วันที่ปัจจุบัน: ซัน 2004.07.18 เวลา 04:14:09 น. PDT
รหัสรูปแบบวันที่ง่าย
ในการระบุรูปแบบเวลาให้ใช้สตริงรูปแบบเวลา ในรูปแบบนี้ตัวอักษร ASCII ทั้งหมดจะถูกเก็บไว้เป็นตัวอักษรรูปแบบซึ่งกำหนดไว้ดังนี้:
| อักขระ | อธิบาย | ตัวอย่าง |
|---|---|---|
| ก | ตัวบ่งชี้เวลา | โฆษณา |
| y | สี่หลัก | 2544 |
| ม. | กลางปี | กรกฎาคมหรือ 07 |
| d | วันที่ของเดือน | 10 |
| ชม. | เวลา AM/PM (1 ~ 12) | 12 |
| ชม | ชั่วโมงในวัน (0 ~ 23) | ยี่สิบสอง |
| ม. | นาทีของชั่วโมง | 30 |
| S | วินาทีของนาที | 55 |
| S | มิลลิวินาที | 234 |
| อี | วันของสัปดาห์ | วันอังคาร |
| d | วันของปี | 360 |
| f | วันของสัปดาห์ในเดือนนี้ | 2 (วันพุธที่สองในเดือนกรกฎาคม) |
| W | สัปดาห์กลางปี | 40 |
| W | สัปดาห์ของเดือน | 1 |
| อัน | เครื่องหมาย AM/PM | น. |
| K | ชั่วโมงในวัน (1 ~ 24) | ยี่สิบสี่ |
| K | ชั่วโมง AM/PM (0 ~ 11) | 10 |
| Z | เขตเวลา | เวลามาตรฐานตะวันออก |
| - | ทิ้งข้อความไว้ | ตัวคั่น |
| - | คำพูดเดียว | - |
นำเข้า java.util.date; คลาสสาธารณะวันที่ DateMo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// อินสแตนซ์วันที่วัตถุวันที่วันที่ = วันที่ใหม่ (); // แสดงเวลาและวันที่โดยใช้ toString () สตริง str = string.format ("วันที่/เวลาปัจจุบัน: %tc", วันที่); System.out.printf (STR); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
วันที่/เวลาปัจจุบัน: วันเสาร์ 15 ธันวาคม 16:37:57 MST 2012
มันเป็นวิธีปฏิบัติที่ไม่ดีที่จะให้การจัดรูปแบบหลายวัน สตริงรูปแบบสามารถระบุดัชนีของพารามิเตอร์ที่จะจัดรูปแบบ
ดัชนีจะต้องตามด้วย % และจะต้องถูกยกเลิกโดย $ ตัวอย่างเช่น:
นำเข้า java.util.date; คลาสสาธารณะวันที่ DateMo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// อินสแตนซ์วันที่วัตถุวันที่วันที่ = วันที่ใหม่ (); // เวลาแสดงและวันที่โดยใช้ toString () system.out.printf (" %1 $ s %2 $ tb %2 $ td, %2 $ ty", "วันครบกำหนด:", วันที่); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
วันครบกำหนด: 09 กุมภาพันธ์ 2547
หรือสามารถใช้ <ธงได้ มันหมายถึงพารามิเตอร์เดียวกันและควรใช้อีกครั้งตามข้อกำหนดของรูปแบบข้างต้น ตัวอย่างเช่น:
นำเข้า java.util.date; คลาสสาธารณะวันที่ DateMo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {// อินสแตนซ์วันที่วัตถุวันที่วันที่ = วันที่ใหม่ (); // แสดงวันที่ที่จัดรูปแบบ system.out.printf (" %s %tb %<te, %<ty", "วันที่ครบกำหนด:", วันที่); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
วันครบกำหนด: 09 กุมภาพันธ์ 2547
อักขระการแปลงวันที่และเวลา
| อักขระ | อธิบาย | ตัวอย่าง |
|---|---|---|
| C | วันที่และเวลาเสร็จสมบูรณ์ | จันทร์ 04 พฤษภาคม 09:51:52 CDT 2009 |
| f | ISO 8601 วันที่ | 2004-02-09 |
| d | เวลาในการจัดรูปแบบของสหรัฐอเมริกา (เดือน/วัน/ปี) | 02/09/2004 |
| T | ระบบ 24 ครั้ง | 18:05:19 |
| R | ระบบ 12 ครั้ง | 06:05:19 น |
| R | ระบบ 24 ครั้งไม่มีวินาที | 18:05 น |
| y | สี่หลัก (ใช้คอลัมน์ Zero แถวแรก) | พ.ศ. 2547 |
| y | สองหลักสุดท้ายของปี (ใช้คอลัมน์แถวแรกเป็นศูนย์) | 04 |
| C | สองหลักแรกของปี (ใช้คอลัมน์แถวแรกเป็นศูนย์) | 20 |
| ข | ชื่อเต็มเดือน | กุมภาพันธ์ |
| ข | ชื่อตัวย่อชื่อ | ก.พ. |
| ม. | สองหลัก (ใช้คอลัมน์ Zero แถวแรก) | 02 |
| d | วันที่สองหลัก (ใช้คอลัมน์ Zero แถวแรก) | 03 |
| อี | Double Digit Date (ไม่มีคอลัมน์ Forward Zero) | 9 |
| อัน | ชื่อเต็มสัปดาห์ | วันจันทร์ |
| อัน | ตัวย่อของชื่อสัปดาห์ | จอน |
| J | สามหลักในช่วงกลางปี (ใช้คอลัมน์แถวแรกเป็นศูนย์) | 069 |
| ชม | สองชั่วโมงสองชั่วโมง (ใช้คอลัมน์ Zero แถวแรก) ระหว่าง 00 ถึง 23 | 18 |
| K | ชั่วโมงสองหลัก (ไม่มีคอลัมน์ศูนย์ไปข้างหน้า) ระหว่าง 0 ถึง 23 | 18 |
| ฉัน | ชั่วโมงสองหลัก (ใช้คอลัมน์แถวแรกเป็นศูนย์) ระหว่าง 01 ถึง 12 | 06 |
| l | ชั่วโมงสองหลัก (ไม่มีคอลัมน์ศูนย์ไปข้างหน้า) ระหว่าง 1 ถึง 12 | 6 |
| ม. | สองนาที (ใช้คอลัมน์ Zero แถวแรก) | 05 |
| S | สองวินาที (ใช้คอลัมน์แถวแรกเป็นศูนย์) | 19 |
| l | มิลลิวินาทีสามหลัก (ใช้คอลัมน์แถวแรกเป็นศูนย์) | 047 |
| n | nanoseconds เก้าหลัก (ใช้คอลัมน์แถวแรกเป็นศูนย์) | 047000000 |
| P | เครื่องหมายช่วงบ่าย | น. |
| P | เครื่องหมายช่วงบ่ายตัวพิมพ์เล็ก | น. |
| Z | RFC 822 ออฟเซ็ตจากหมายเลข GMT | -0800 |
| Z | เขตเวลา | PST |
| S | วินาทีจาก 1970-01-01 00:00:00 GMT | 1078884319 |
| ถาม | GMT จาก 1970-01-01 00:00:00 | 1078884319047 |
วันที่แปลงสตริง
คลาส SimpledateFormat มีวิธีการเพิ่มเติมบางอย่างเช่น parse () ซึ่งพยายามแปลงสตริงตามรูปแบบของวัตถุที่เก็บไว้ใน simpledateFormat ที่กำหนด ตัวอย่างเช่น:
นำเข้า java.util.*; นำเข้า Java.Text.*; คลาสสาธารณะ dateMo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {simpledateFormat ft = ใหม่ simpledateFormat ("yyyy-mm-dd"); สตริงอินพุต = args.length == 0? "1818-11-11": Args [0]; System.out.print (อินพุต + "พาร์ทเป็น"); วันที่ t; ลอง {t = ft.parse (อินพุต); System.out.println (t); } catch (parseexception e) {system.out.println ("ไม่สามารถใช้งานได้โดยใช้" + ft); -ตัวอย่างการทำงานของโปรแกรมข้างต้นจะให้ผลลัพธ์ต่อไปนี้:
$ java datedemo1818-11-11 พาร์ทรีเมื่อพุธ 11 พ.ย. 00:00:00 GMT 1818 $ java datedemo 2007-12-012007-12-01 พาร์ทเป็นวันเสาร์ที่ 1 ธันวาคม 00:00:00 GMT 2007
นอนสักพัก
คุณสามารถดำเนินการได้ตลอดเวลาในระหว่างการจำศีลตั้งแต่มิลลิวินาทีถึงวงจรชีวิตทั้งหมดของคอมพิวเตอร์ของคุณ ตัวอย่างเช่นโปรแกรมต่อไปนี้จะนอนหลับเป็นเวลา 10 วินาที:
นำเข้า Java.util.*; Public Class SleepDemo {โมฆะคงที่สาธารณะ (String args []) {ลอง {system.out.println (วันที่ใหม่ () + "/n"); Thread.sleep (5*60*10); System.out.println (วันที่ใหม่ () + "/n"); } catch (exception e) {system.out.println ("มีข้อยกเว้น!"); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
ดวงอาทิตย์ 03 พฤษภาคม 18:04:41 GMT 2009sun พฤษภาคม 03 18:04:51 GMT 2009
วัดเวลาดำเนินการ
บางครั้งจุดเวลาที่อาจวัดได้อาจเป็นมิลลิวินาที ดังนั้นเรามาเขียนตัวอย่างข้างต้นอีกครั้ง:
นำเข้า java.util.*; คลาสสาธารณะ diffdemo {โมฆะคงที่สาธารณะหลัก (สตริง args []) {ลอง {start long = system.currentTimeMillis (); System.out.println (วันที่ใหม่ () + "/n"); Thread.sleep (5*60*10); System.out.println (วันที่ใหม่ () + "/n"); Long End = System.currentTimeMillis (); Long diff = end - เริ่ม; System.out.println ("ความแตกต่างคือ:" + diff); } catch (exception e) {system.out.println ("มีข้อยกเว้น!"); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
ดวงอาทิตย์ 03 พฤษภาคม 18:16:51 GMT 2009sun พฤษภาคม 03 18:16:57 GMT 2009difference คือ: 5993
ชั้นเรียน Gregoriancalendar
Gregoriancalendar เป็นการดำเนินการที่เป็นรูปธรรมของคลาสปฏิทินนั่นคือการดำเนินการของเกรกอเรียนเกรกอเรียนเกรกอเรียนปกติที่คุณคุ้นเคย คลาสปฏิทินไม่ได้กล่าวถึงในบทช่วยสอนนี้คุณสามารถตรวจสอบเอกสาร Java มาตรฐาน
เมธอด GetInstance () ของปฏิทินส่งคืน Gregoriancalendar เริ่มต้นด้วยวันที่และเวลาและเวลาเริ่มต้นและเวลาในปัจจุบันและเขตเวลา สองสาขาถูกกำหนดใน Gregoriancalendar: AD และ BC สิ่งเหล่านี้เป็นตัวแทนของยุคทั้งสองที่กำหนดไว้ในปฏิทิน Gregorian
นอกจากนี้ยังมีตัวสร้างหลายตัวของวัตถุ Gregoriancalendar:
| SN | คำอธิบายตัวสร้าง |
|---|---|
| 1 | Gregoriancalendar () สร้าง Gregoriancalendar เริ่มต้นโดยใช้เวลาปัจจุบันในโซนเวลาเริ่มต้นด้วยตำแหน่งเริ่มต้น |
| 2 | Gregoriancalendar (Int Year, Int Month, Int Date) ตั้งค่าตำแหน่งเริ่มต้นในโซนเวลาเริ่มต้นเพื่อสร้าง gregoriancalendar ตามวันที่ที่กำหนด |
| 3 | Gregoriancalendar (Int Year, Int Month, Int Date, Int Hour, Int นาที) สร้าง Gregoriancalendar ด้วยวันที่และเวลาที่กำหนดไว้ที่กำหนดเป็นเขตเวลาเริ่มต้นด้วยสถานที่เริ่มต้น |
| 4 | Gregoriancalendar (Int Year, Int Month, Int Date, Int Hour, Int นาที, int second) สร้าง Gregoriancalendar ด้วยวันที่และเวลาที่กำหนดไว้ที่กำหนดเป็นเขตเวลาเริ่มต้นด้วยตำแหน่งเริ่มต้น |
| 5 | Gregoriancalendar (Locale Alocale) สร้าง Gregoriancalendar ตามเวลาปัจจุบันและโซนเวลาเริ่มต้นของสถานที่ที่กำหนด |
| 6 | Gregoriancalendar (เขตเขตเวลา) ตามเวลาปัจจุบัน Gregoriancalendar ถูกสร้างขึ้นในเขตเวลาที่กำหนดโดยใช้สถานที่เริ่มต้น |
| 7 | Gregoriancalendar (โซนเขตเวลา, locale alocale) Gregoriancalendar ถูกสร้างขึ้นตามเวลาปัจจุบันและเขตเวลาที่กำหนดของสถานที่ที่กำหนด |
| SN | วิธีการและคำอธิบาย |
|---|---|
| 1 | เป็นโมฆะเพิ่ม (ฟิลด์ int, จำนวน int) กฎที่อิงตามปฏิทินเพิ่มจำนวนเวลาที่ระบุ (ลงนาม) ในฟิลด์เวลาที่กำหนด |
| 2 | Void Computefields ได้รับการป้องกัน () แปลง UTC เป็นค่าฟิลด์เวลามิลลิวินาที |
| 3 | Void ComputeTime ที่ได้รับการป้องกัน () เขียนทับมิลลิวินาทีซึ่งปฏิทินแปลงค่าโดเมนเวลาเป็น UTC |
| 4 | บูลีนเท่ากับ (Object OBJ) Gregoriancalendar นี้เปรียบเทียบกับการอ้างอิงวัตถุ |
| 5 | int get (ฟิลด์ int) ได้รับค่าของโดเมนเวลาที่กำหนด |
| 6 | int getactualmaximum (ฟิลด์ int) ส่งคืนค่าสูงสุดที่เป็นไปได้ของฟิลด์ที่กำหนดให้กับวันที่ปัจจุบัน |
| 7 | int getactualminimum (ฟิลด์ int) ส่งคืนค่าต่ำสุดที่ฟิลด์อาจมีตามวันที่ปัจจุบัน |
| 8 | int getGreatestMinimum (Int Field) ส่งคืนค่าสูงและต่ำที่สุด (ถ้ามีการเปลี่ยนแปลง) สำหรับฟิลด์ที่กำหนด |
| 9 | วันที่ getGregorianchange () รับวันที่เปลี่ยนแปลงในปฏิทิน Gregorian |
| 10 | int getLeastmaximum (ฟิลด์ int) ส่งคืนค่าสูงสุดต่ำสุดสำหรับฟิลด์ที่กำหนดหากมีการเปลี่ยนแปลง |
| 11 | int getMaximum (ฟิลด์ int) ส่งคืนค่าสูงสุดในฟิลด์ที่กำหนด |
| 12 | วันที่ getTime () รับเวลาปัจจุบันของปฏิทิน |
| 13 | Long getTimeInmillis () เวลาปัจจุบันในการรับปฏิทิน |
| 14 | เขตเวลา GetTimeZone () รับโซนเวลา |
| 15 | int getMinimum (ฟิลด์ int) ส่งคืนค่าต่ำสุดในฟิลด์ที่กำหนด |
| 16 | int hashcode () เขียนใหม่ hashcode |
| 17 | Boolean Isleapyear (Int Year) กำหนดว่าปีที่กำหนดเป็นปีที่ก้าวกระโดด |
| 18 | โมฆะม้วน (สนาม int, บูลีนขึ้น) เพิ่มหรือลบ (ขึ้น/ลง) เวลา (ขึ้น/ลง) หน่วยในฟิลด์เวลาที่กำหนดโดยไม่ต้องเปลี่ยนฟิลด์ขนาดใหญ่ |
| 19 | ชุดโมฆะ (ฟิลด์ int, ค่า int) ตั้งค่าฟิลด์เวลาด้วยค่าที่กำหนด |
| 20 | Void Set (Int Year, Int Month, Int Date) ตั้งค่าเป็นมูลค่าของปีเดือนและวัน |
| ยี่สิบเอ็ด | Void Set (Int Year, Int Month, Int Date, Int Hour, Int นาที) ตั้งค่าเป็นปีเดือนวันชั่วโมงและนาที |
| ยี่สิบสอง | Void Set (Int Year, Int Month, Int Date, Int Hour, Int นาที, int second) ตั้งค่าเป็นมูลค่าของปีเดือนวันชั่วโมงนาทีและที่สองของสนาม |
| ยี่สิบสาม | เป็นโมฆะ SetGregorianchange (วันที่) ตั้งวันที่เปลี่ยน Gregoriancalendar |
| ยี่สิบสี่ | เป็นโมฆะ settime (วันที่วันที่) กำหนดเวลาปัจจุบันและวันที่ที่กำหนดของปฏิทิน |
| 25 | เป็นโมฆะ settimeinmillis (มิลลิสยาว) กำหนดเวลาปัจจุบันของปฏิทินจากค่าที่กำหนด |
| 26 | เป็นโมฆะ settimzone (ค่าเขตเวลา) ตั้งค่าโซนเวลาด้วยค่าโซนเวลาที่กำหนด |
| 27 | สตริง toString () ส่งคืนการแสดงสตริงของปฏิทินนี้ |
นำเข้า java.util.*; คลาสสาธารณะ Gregoriancalendardemo {โมฆะคงที่สาธารณะหลัก (String args []) {String เดือน [] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct" Int ปี; // สร้าง gregoriancalendar เริ่มต้น // ด้วยวันที่และเวลาปัจจุบันใน // เริ่มต้นสถานที่และเขตเวลา Gregoriancalendar gcalendar = New Gregoriancalendar (); // แสดงข้อมูลเวลาและวันที่ปัจจุบัน System.out.print ("วันที่:"); System.out.print (เดือน [gcalendar.get (calendar.month)]); System.out.print ("" + gcalendar.get (calendar.date) + ""); System.out.println (ปี = gcalendar.get (calendar.year)); System.out.print ("เวลา:"); System.out.print (gcalendar.get (calendar.hour) + ":"); System.out.println (gcalendar.get (calendar.minute) + ":"); System.out.println (gcalendar.get (calendar.second)); // ทดสอบว่าปีปัจจุบันเป็นปีที่ก้าวกระโดดถ้า (gcalendar.isleapyear (ปี)) {system.out.println ("ปีปัจจุบันเป็นปีกระโดด"); } else {system.out.println ("ปีปัจจุบันไม่ใช่ปีกระโดด"); -สิ่งนี้จะให้ผลลัพธ์ต่อไปนี้:
วันที่: 22 เม.ย. 2009Time: 11: 25: 27 ปีปัจจุบันไม่ใช่ปีกระโดด
แอปเพล็ตปฏิทิน
มาดูแอปเพล็ตปฏิทิน ที่นี่เราใช้โครงสร้าง MVC แบบดั้งเดิมเพื่อออกแบบสามหมวดหมู่: CalendArviewer, Calendarcontroller และ CalendArmodel
CalendarViewer.java ส่วนใหญ่ประมวลผล UI ใช้รหัสที่มีอยู่จัดระเบียบและแยกตรรกะทางธุรกิจเพื่อให้มุ่งเน้นไปที่การประมวลผลเลเยอร์ที่แสดง
CalendarViewer.java
CalendarViewer ระดับสาธารณะขยาย JWINDOW ใช้ ActionListener {JPanel CalendaryMpanel = NULL; JButton leftButton = new JButton ("<<"); JButton Rightbutton = new JButton (">>"); ฉลาก yearlabel = ใหม่ป้ายกำกับ (); ฉลาก monthlabel = ใหม่ป้ายกำกับ (); ป้ายกำกับ PassedDaySlabel = new label (); JPanel CalendarWdPanel = null; // เป็นตัวรวมทั้งหมดของปฏิทิน _week และปฏิทิน _days jpanel calendarweekPanel = null; // เลย์เอาต์สำหรับคอลัมน์รายสัปดาห์ JPanel CalendardaysPanel = NULL; // เลย์เอาต์สำหรับคอลัมน์วันที่ JButton QuitButton = New JButton ("Close"); Border EmptyBorder = BorderFactory.CreateSptyBorder (); CALENDARCONTROLLER CCONTROLLER = ใหม่ CALENDARCONTROLLER (); Public CalendarViewer () {super (); buildui (); } โมฆะสาธารณะ buildui () {buildtoppanel (); BuildCenterPanel (); buildbottompanel (); SetLayout (New BorderLayout ()); - - - - - - } โมฆะส่วนตัว buildtoppanel () { - - - - - } โมฆะส่วนตัว BuildCenterPanel () { - - - - - } โมฆะส่วนตัว buildbottompanel () { - - - - - } jPanel สาธารณะ updatedaySpanel () { - - - - - } โมฆะสาธารณะ UpdatePassedDaySlabel () { - - - - - } โมฆะสาธารณะ ActionPerformed (ActionEvent E) { - - - - - } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {swingutilities.invokelater (ใหม่ runnable () {public void run () {ใหม่ CalendarViewer ();}}); -โครงสร้าง UI ส่วนใหญ่แบ่งออกเป็น 3 ช่วงตึกซึ่งสอดคล้องกับสามแผงที่รูปด้านบนกลางและล่าง
การประมวลผลการฟังเหตุการณ์เสร็จสมบูรณ์โดยวิธีการต่อไปนี้
การอัปเดต UI ที่ใช้เหตุการณ์ทำได้โดยสองวิธีต่อไปนี้
UpdatedaySpanel (); UpdatePassedDaysLabel (); Calendarcontroller.java ส่วนใหญ่เกี่ยวข้องกับตรรกะทางธุรกิจเฉพาะในขณะที่ตรรกะอัลกอริทึมอัลกอริทึมของปฏิทินบางอย่างที่ไม่เกี่ยวข้องกับแอปพลิเคชันเฉพาะจะถูกส่งไปยังปฏิทิน Calendarmodel.javapublic คลาสปฏิทิน {private int daytab [] [] = {{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 30, 31}, {0, 31, 29, 31, 30, 31, 30, 31, 31 Public Boolean Isleapyear (Int Year) {return ((ปี % 4 == 0 && ปี % 100! = 0) || ปี % 400 == 0); } public int dayofyear (วัน int, เดือน int, ปี int) {int leap = isleapyear (ปี)? 1: 0; สำหรับ (int i = 1; i <เดือน; i ++) วัน+= daytab [leap] [i]; วันกลับ; } public int daysofmonth (int เดือน, ปี int) {int leap = isleapyear (ปี)? 1: 0; กลับ DayTab [Leap] [เดือน]; } public int dayofweek (int day, int เดือน, int ปี) {ถ้า (เดือน == 1) {เดือน = 13; ปี--; } ถ้า (เดือน == 2) {เดือน = 14; ปี--; } return (วัน + 2 * เดือน + 3 * (เดือน + 1) / 5 + ปี + ปี / 4 - ปี / 100 + ปี / 400) % 7 + 1; -สร้างอาร์เรย์สองมิติที่แสดงถึงจำนวนวันต่อเดือนสำหรับปีที่ก้าวกระโดดและไม่ใช่ปีที่ไม่สมัครตามลำดับ วิธีหลักคือ:
สูตรการคำนวณ Kim Larson