1. ZonedDateTime
ชั้นเรียน
มีอีกคลาสที่น่าสนใจมากใน Date Time API: ZonedDateTime
คลาส จุดประสงค์หลักคือการทำให้สะดวกในการทำงานกับวันที่ในเขตเวลาต่างๆ
LocalDate
เหมาะสำหรับการแสดงวันที่ ตัวอย่างเช่นวันเกิด วันเกิดของฉันคือวันที่ 15 มีนาคม ไม่ว่าฉันจะอยู่ที่ไหน นี่คือตัวอย่างวันที่
LocalTime
อธิบายเวลาได้ดีมาก เหมือนเวลาที่ตั้งไว้บนนาฬิกาปลุก ฉันตั้งนาฬิกาปลุกไว้ตอนตี 5 ไม่สำคัญว่าฉันจะอยู่ที่ไหน 05.00 น. คือ 05.00 น. นี่คือตัวอย่างของการทำงานกับเวลา
สมมติว่าเรากำลังเขียนใบสมัครเพื่อจองเที่ยวบิน เครื่องบินขึ้นและลงตามเวลาท้องถิ่น เครื่องบินอยู่ในอากาศตามเวลาที่กำหนด แต่เขตเวลาสามารถเปลี่ยนแปลงได้
โซนเวลา
อย่างไรก็ตาม เขตเวลานั้นยุ่งเหยิงจริงๆ และถ้าคุณคิดว่ามี 24 โซนเวลา คุณคิดผิดอย่างมาก
ตัวอย่างเช่น เวลาในอินเดียแตกต่างจากเวลามาตรฐานกรีนิช 5 ชั่วโมงครึ่งGMT+5:30
: บางประเทศเปลี่ยนเป็นเวลาออมแสง และบางประเทศไม่เปลี่ยน ยิ่งไปกว่านั้น ประเทศต่างๆ จะเปลี่ยนไปใช้ฤดูร้อนในช่วงเวลาต่างๆ ของปี
และบางประเทศผ่านกฎหมายที่ยกเลิกการปรับเวลาตามฤดูกาล หรือนำกลับมาใช้ใหม่ หรือยกเลิกอีกครั้ง
ไม่ว่าในกรณีใดก็ตาม โลกมีโซนเวลา และภายในแต่ละโซนเวลาจะมีเวลาเดียว เวลาในโซนต่างๆ อาจตรงกันในบางช่วงของปี และแตกต่างกันในช่วงอื่นๆ โซนเวลามักจะตั้งชื่อตามเมืองใหญ่ที่ตั้งอยู่ในเขตเหล่านั้น: Europe/Monaco
, Asia/Singapore
, แต่ก็มีข้อยกเว้นเช่นกันUS/Pacific
—
อย่างเป็นทางการ ขณะนี้มี 599 โซนเวลา ลองคิดดู: 599 นั่นยังห่างไกลจาก 24 ยินดีต้อนรับสู่โลกสากล
คลาสZoneId
จากjava.time
แพ็คเกจใช้เพื่อจัดเก็บเขตเวลาใน Java
อย่างไรก็ตาม มันมีgetAvailableZoneIds()
เมธอดแบบสแตติกซึ่งจะส่งคืนชุดของโซนเวลาที่รู้จักทั้งหมดในปัจจุบัน หากต้องการดูรายการโซนทั้งหมด คุณต้องเขียนโค้ดต่อไปนี้:
รหัส | เอาต์พุตคอนโซล (บางส่วน) |
---|---|
|
|
ในการรับZoneId
วัตถุตามชื่อ คุณต้องใช้of()
เมธอดแบบ สแตติก
รหัส | บันทึก |
---|---|
|
|
2. การสร้างZonedDateTime
วัตถุ
เมื่อสร้างZonedDateTime
วัตถุ คุณต้องเรียกใช้now()
เมธอดสแตติกของคลาสและส่งZoneId
วัตถุไปให้
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
หากคุณไม่ส่งZoneId
วัตถุไปยังnow()
เมธอด (และที่อนุญาต) เขตเวลาจะถูกกำหนดโดยอัตโนมัติตามการตั้งค่าของคอมพิวเตอร์ที่เรียกใช้โปรแกรม
ตัวอย่าง:
รหัส | เอาต์พุตคอนโซล |
---|---|
|
|
การแปลงวันที่สากลเป็นวันที่ท้องถิ่น
หนึ่งในคุณสมบัติที่น่าสนใจZonedDateTime
คือความสามารถในการแปลงเป็นวันที่และเวลาท้องถิ่น ตัวอย่าง:
ZoneId zone = ZoneId.of("Africa/Cairo");
ZonedDateTime cairoTime = ZonedDateTime.now(zone);
LocalDate localDate = cairoTime.toLocalDate();
LocalTime localTime = cairoTime.toLocalTime();
LocalDateTime localDateTime = cairoTime.toLocalDateTime();
3. ทำงานตามเวลา
เช่นเดียวกับLocalDateTime
ชั้นเรียน ชั้นZonedDateTime
เรียนมีหลายวิธีในการรับองค์ประกอบแต่ละส่วนของวันที่และเวลา นี่คือรายการของวิธีการเหล่านี้:
|
ส่งกลับปีของวันที่ที่ระบุ |
|
ส่งกลับวันที่ของเดือน: หนึ่งในหลาย ๆ ค่าคงที่ —JANUARY, FEBRUARY, ...; |
|
ส่งกลับดัชนีของเดือนวันที่ มกราคม == 1 |
|
ส่งกลับดัชนีของวันของเดือน |
|
ส่งกลับวันในสัปดาห์: หนึ่งในหลาย ๆ ค่าคงที่ —MONDAY, TUESDAY, ...; |
|
ส่งกลับดัชนีของวันในปี |
|
ส่งกลับชั่วโมง |
|
ส่งกลับนาที |
|
คืนค่าวินาที |
|
คืนค่านาโนวินาที |
วิธีการทั้งหมดมีความคล้ายคลึงกับวิธีการของLocalDateTime
ชั้นเรียน อย่างสมบูรณ์แบบ และแน่นอนZonedDateTime
ชั้นเรียนมีวิธีการที่ให้คุณทำงานกับวันที่และเวลาได้ ที่กล่าวว่าวัตถุที่เมธอดถูกเรียกจะไม่เปลี่ยนแปลง แต่จะส่งคืนZonedDateTime
วัตถุใหม่แทน:
วิธีการ | คำอธิบาย |
---|---|
|
เพิ่มปีในวันที่ |
|
เพิ่มเดือนในวันที่ |
|
เพิ่มวันในวันที่ |
|
เพิ่มชั่วโมง |
|
เพิ่มนาที |
|
เพิ่มวินาที |
|
เพิ่มนาโนวินาที |
|
ลบปีจากวันที่ |
|
ลบเดือนจากวันที่ |
|
ลบวันออกจากวันที่ |
|
ลบชั่วโมง |
|
ลบนาที |
|
ลบวินาที |
|
ลบนาโนวินาที |
เราจะไม่ยกตัวอย่างใดๆ เนื่องจากเราคิดว่าทุกอย่างชัดเจนโดยเปรียบเทียบกับชั้นเรียนที่เราเพิ่งพิจารณา
GO TO FULL VERSION