1. สลับจากDate
ชั้นเรียนไปยังCalendar
ชั้นเรียน
โปรแกรมเมอร์ชอบDate
คลาสนี้เพราะความเรียบง่ายและการรองรับมาตรฐาน Unix แต่อย่างที่คุณทราบ กุหลาบทุกดอกมีหนาม
โปรแกรมเมอร์ต้องการDate
คลาสที่ "ฉลาด" และพวกเขาได้สิ่งที่ต้องการในรูปแบบของCalendar
ชั้นเรียน มันถูกมองว่าเป็นวิธีที่ไม่เพียงแค่จัดเก็บวันที่เท่านั้น แต่ยังรวมถึงการดำเนินการที่ยากลำบากกับวันที่อีกด้วย
ชื่อเต็มของCalendar
คลาสคือ java.util.Calendar อย่าลืมเพิ่มลงในคำสั่งนำเข้าหากคุณตัดสินใจที่จะใช้ในรหัสของคุณ
คุณสามารถสร้างCalendar
วัตถุด้วยคำสั่งนี้:
Calendar date = Calendar.getInstance();
เมธอด สแตติกgetInstance()
ของCalendar
คลาสสร้างCalendar
วัตถุที่เริ่มต้นด้วยวันที่ปัจจุบัน ปฏิทินที่คุณต้องการจะถูกสร้างขึ้นตามการตั้งค่าของคอมพิวเตอร์ที่ใช้งานโปรแกรม
หรือพูดให้ถูกคือ ปฏิทินที่คุณได้รับ... นั่นเป็นเพราะมนุษย์บนโลกไม่ได้ถูกจำกัดไว้เพียงปฏิทินเดียว พวกเขาใช้หลายอย่างแทน และเกือบทุกคนมีความเกี่ยวข้องกับบางศาสนาหรือบางประเทศ คลาสCalendar
รองรับ 3 คลาส:
ปฏิทิน | คำอธิบาย |
---|---|
ปฏิทินเกรกอเรียน | ปฏิทินคริสเตียนเกรกอเรียน |
ปฏิทินพุทธ | ปฏิทินพุทธ |
ปฏิทินจักรวรรดิญี่ปุ่น | ปฏิทินจักรวรรดิญี่ปุ่น |
แต่ก็มีปฏิทินจีนและอาหรับด้วย โดยพื้นฐานแล้ว การทำงานกับเวลานั้นไม่ง่ายอย่างที่คิด
ในปฏิทินจีน ปีอย่างเป็นทางการคือ 4716 ณ เวลาที่เขียนบทเรียนนี้ และตามปฏิทินมุสลิม ปีคือ 1398 ยินดีต้อนรับสู่โลกใบใหญ่ เพื่อนโปรแกรมเมอร์ของฉัน
2. การสร้างวัตถุปฏิทิน
เราจะใช้ปฏิทินเกรกอเรียนเนื่องจากเป็นปฏิทินที่พบมากที่สุดในโลก อย่างน้อยก็จนกว่าจีนจะซื้อ Oracle และทำให้ปฏิทินจีนเป็นปฏิทินหลัก
คุณสามารถสร้างวัตถุปฏิทินที่มีวันที่ใดก็ได้โดยใช้คำสั่งดังนี้:
Calendar date = new GregorianCalendar(year, month, day);
ใช่ คุณต้องเขียนGregorianCalendar
ทุกครั้ง แทนที่จะเป็นCalendar
คุณยังสามารถเขียนได้GregorianCalendar
ซึ่งจะได้ผลเช่นกัน แต่การเขียนนั้นCalendar
สั้นกว่า
ต้องเขียนปีเต็ม เช่น คุณไม่สามารถเขียน 19 แทน 2019 ได้ เดือนจะยังคงเป็นตัวเลขจากศูนย์ แต่ก่อนวันของเดือนไม่ได้นับจากศูนย์ เนิร์ด!
หากต้องการตั้งเวลาและวันที่ คุณต้องป้อนเวลาเป็นอาร์กิวเมนต์เพิ่มเติม:
... = new GregorianCalendar(year, month, day, hours, minutes, seconds);
คุณสามารถส่งผ่านหน่วยเป็นมิลลิวินาทีได้หากจำเป็น เป็นพารามิเตอร์หลังจากจำนวนวินาที
3. การแสดงวัตถุปฏิทินบนหน้าจอ
หากคุณเพียงแค่พิมพ์วัตถุปฏิทินบนหน้าจอ คุณจะไม่พอใจกับผลลัพธ์ที่ได้
รหัส |
---|
|
เอาต์พุตคอนโซล |
|
สิ่งที่ต้องจำไว้ในที่นี้คือปฏิทินคือปฏิทิน ไม่ใช่วันที่มีการตั้งค่าทุกประเภทที่จะแสดงบนหน้าจอ
จะเป็นการเหมาะสมที่จะใช้SimpleDateFormat
วัตถุเพื่อแสดงปฏิทิน แต่จนกว่าเราจะศึกษา คุณสามารถใช้เคล็ดลับชีวิตนี้ได้
Date date = calendar.getTime();
วัตถุCalendar
สามารถแปลงเป็นDate
วัตถุได้ง่าย และคุณรู้วิธีแสดงDate
วัตถุ แล้ว คุณสามารถใช้รหัสเช่นนี้เพื่อแปลงCalendar
วัตถุเป็นDate
:
โดยใช้getTime()
วิธีการ:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
นั่นเป็นเรื่องที่แตกต่างกันมากใช่ไหม
4. การทำงานกับองค์ประกอบของวันที่
ในการรับองค์ประกอบเฉพาะของวันที่ (เช่น ปี เดือน ...) Calendar
คลาสมีget()
วิธีการ เป็นวิธีเดียว แต่มีพารามิเตอร์:
int month = calendar.get(Calendar.MONTH);
calendar
ตัวแปร อยู่ที่ไหนCalendar
และMONTH
เป็นเขตข้อมูลคงที่ของCalendar
คลาส
คุณส่งผ่านCalendar
ฟิลด์ค่าคงที่ของคลาสหนึ่งเป็นอาร์กิวเมนต์ไปยังget
เมธอด และคุณจะได้ค่าที่ต้องการเป็นผลลัพธ์
ตัวอย่าง
รหัส | คำอธิบาย |
---|---|
|
พ.ศ. (ก่อนหรือหลัง พ.ศ.) ปี เดือน วันของเดือน วันในสัปดาห์ ชั่วโมง นาที วินาที |
หากต้องการเปลี่ยนองค์ประกอบของวันที่ ให้ใช้set
วิธีการ:
calendar.set(Calendar.MONTH, value);
calendar
ตัวแปร อยู่ที่ไหนCalendar
และMONTH
เป็นเขตข้อมูลคงที่ของCalendar
คลาส
เมื่อทำงานกับset
เมธอด คุณจะส่งผ่านฟิลด์ค่าคงที่ของคลาสหนึ่งCalendar
เป็นอาร์กิวเมนต์แรก และค่าใหม่เป็นอาร์กิวเมนต์ที่สอง
ตัวอย่าง
รหัส | คำอธิบาย |
---|---|
|
ปี = 2019 เดือน = กรกฎาคม (นับจาก 0) วันที่ 4 ชั่วโมง นาที วินาที |
5. ค่าคงที่ของCalendar
คลาส
ฟิลด์ค่าคงที่ของCalendar
คลาสไม่จำกัดเฉพาะฟิลด์สำหรับตั้งชื่ออิลิเมนต์ของวันที่ ดูเหมือนจะมีฟิลด์สำหรับทุกโอกาส
Calendar date = new GregorianCalendar(2019, Calendar.JANUARY, 31);
ตัวอย่างเช่น มีช่องคงที่สำหรับอ้างถึงเดือน:
และวันในสัปดาห์ด้วย:
Calendar calendar = new GregorianCalendar(2019, Calendar.JANUARY, 31);
if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY)
{
System.out.println("It's Friday");
}
เราจะไม่แสดงรายการทุกอย่าง เราไม่อยากให้คุณแปลกใจถ้าคุณเห็นค่าคงที่แบบนี้ในโค้ด
การใช้ค่าคงที่ทำให้โค้ดอ่านง่ายขึ้น ซึ่งเป็นสาเหตุที่โปรแกรมเมอร์ใช้ และมีการนับเดือนจากศูนย์ด้วยเพื่อให้อ่านง่ายขึ้น หรือไม่.
6. การเปลี่ยนวันที่ในCalendar
วัตถุ
ชั้นCalendar
เรียนมีวิธีการที่ช่วยให้คุณจัดการวันที่ด้วยวิธีที่ชาญฉลาดยิ่งขึ้น ตัวอย่างเช่น คุณสามารถเพิ่มหนึ่งปี หนึ่งเดือน หรือหลายวันลงในวันที่ หรือเอาพวกมันออกไป วิธีนี้เรียกadd()
ว่า การทำงานกับมันมีลักษณะดังนี้:
calendar.add(Calendar.MONTH, value);
calendar
ตัวแปร อยู่ที่ไหนCalendar
และMONTH
เป็นเขตข้อมูลคงที่ของCalendar
คลาส
เมื่อทำงานกับadd
เมธอด คุณจะส่งผ่านฟิลด์ค่าคงที่ของคลาสหนึ่งCalendar
เป็นอาร์กิวเมนต์แรก และเป็นอาร์กิวเมนต์ที่สอง ซึ่งเป็นค่าใหม่ที่จะเพิ่ม
นี่เป็นอีกหนึ่งวิธีที่ชาญฉลาด มาดูกันว่ามันฉลาดแค่ไหน:
รหัส |
---|
|
เอาต์พุตคอนโซล |
|
วิธีนี้เข้าใจว่ากุมภาพันธ์ 2562 มีแค่ 28 วัน ผลคือวันที่ 1 มีนาคม
ตอนนี้มาใช้เวลา 2 เดือนกันเถอะ! เราควรได้อะไร? วันที่ 27 ธันวาคม 2561 ! มาตรวจสอบกัน
ในการดำเนินการที่ให้ผลลัพธ์ในวันที่ก่อนหน้า คุณต้องส่งค่าลบไปยังเมธอดadd()
:
รหัส |
---|
|
เอาต์พุตคอนโซล |
|
มันได้ผล!
วิธีนี้จะพิจารณาระยะเวลาที่แตกต่างกันของเดือนและปีอธิกสุรทิน สรุปแล้วเป็นวิธีการที่ยอดเยี่ยม เป็นสิ่งที่โปรแกรมเมอร์ส่วนใหญ่ที่ทำงานเกี่ยวกับวันที่ต้องการอย่างแท้จริง
7. กลิ้งองค์ประกอบของวันที่
แต่บางครั้งก็มีบางสถานการณ์ที่เราไม่ต้องการพฤติกรรมอันชาญฉลาดนี้ เช่น คุณต้องการทำบางอย่างในช่วงหนึ่งของวันที่โดยไม่เปลี่ยนแปลงอย่างอื่น
ชั้นCalendar
เรียนมีroll()
วิธีการพิเศษสำหรับสิ่งนี้ ลายเซ็นของมันเหมือนกับadd()
เมธอด แต่เมธอดนี้จะเปลี่ยนเพียงองค์ประกอบหนึ่งของวันที่ โดยปล่อยให้ส่วนที่เหลือไม่เปลี่ยนแปลง
ตัวอย่าง:
รหัส |
---|
|
เอาต์พุตคอนโซล |
|
เราเปลี่ยนเดือน แต่ปีและวันที่ยังคงไม่เปลี่ยนแปลง
GO TO FULL VERSION