นอกเหนือจากการแสดงออกของแลมบ์ดาสตรีมและการปรับปรุงเล็กน้อยหลายอย่างแล้ว Java 8 ยังแนะนำชุดเวลาและวันที่ใหม่ในบทช่วยสอนนี้เราจะได้เรียนรู้วิธีการใช้ Java 8 ผ่านตัวอย่างงานง่าย ๆ การประมวลผลวันที่ของ Java ปฏิทินและเวลาได้รับการวิพากษ์วิจารณ์เสมอโดยเฉพาะอย่างยิ่งการตัดสินใจที่จะกำหนด java.util.date ที่แก้ไขได้และใช้งาน SimpledateFormat ว่าไม่ปลอดภัย ดูเหมือนว่า Java ได้ตระหนักว่าจำเป็นต้องให้การสนับสนุนที่ดีขึ้นสำหรับฟังก์ชันการทำงานของเวลาและวันที่ซึ่งเป็นสิ่งที่ดีสำหรับชุมชนที่ใช้ในการใช้ห้องสมุดเวลาและวันที่ของโจดา ข้อได้เปรียบที่ใหญ่ที่สุดของห้องสมุดเวลาและวันที่ใหม่นี้คือการกำหนดแนวคิดบางอย่างที่เกี่ยวข้องกับเวลาและวันที่อย่างชัดเจนเช่นเวลาทันที (ทันที) ระยะเวลา (ระยะเวลา), วันที่ (วันที่), เวลา (เวลา), เขตเวลา (เวลา -zone) และช่วงเวลา (ระยะเวลา) นอกจากนี้ยังใช้ประโยชน์จากข้อดีบางประการของห้องสมุดโจดาเช่นแยกแยะความเข้าใจเกี่ยวกับเวลาและวันที่ระหว่างมนุษย์และเครื่องจักร Java 8 ยังคงใช้ระบบปฏิทินของ ISO และไม่เหมือนรุ่นก่อนคลาสในแพ็คเกจ Java.time นั้นไม่เปลี่ยนรูปและปลอดภัย เวลาและวันที่ใหม่ API อยู่ในแพ็คเกจ Java.Time
1.instant-it แสดงถึงการประทับเวลา
2. LocalDate-วันที่ไม่รวมเวลาที่กำหนดเช่น 2014-01-14 สามารถใช้ในการจัดเก็บวันเกิดวันครบรอบวันที่เหนี่ยวนำและอื่น ๆ
3.LocalTime - มันหมายถึงเวลาที่ไม่มีวันที่
4.LocaldatetEtime-มันมีวันที่และเวลา แต่ยังไม่มีข้อมูลชดเชยหรือเขตเวลา
5.ZonedDatetime - นี่เป็นวันที่และเวลาที่สมบูรณ์ที่มีโซนเวลาและออฟเซ็ตจะขึ้นอยู่กับเวลา UTC/Greenwich
ห้องสมุดใหม่ยังเพิ่มโซนออฟเซ็ตและ Zoned ซึ่งสามารถให้การสนับสนุนที่ดีขึ้นสำหรับโซนเวลา ด้วย datetimeformatter ใหม่การแยกวิเคราะห์และการจัดรูปแบบของวันที่ได้กลายเป็นใหม่เช่นกัน เพิ่งพูดถึงบทความนี้ฉันเขียนบทความนี้เมื่อ Java กำลังจะเปิดตัวฟีเจอร์ใหม่นี้ในเวลานี้เมื่อปีที่แล้วดังนั้นคุณจะพบว่าเวลาในตัวอย่างยังคงมาจากปีที่แล้ว หากคุณเรียกใช้ตัวอย่างเหล่านี้ค่าที่พวกเขากลับมานั้นถูกต้องแน่นอน
Java 8 จัดการเวลาและวันที่อย่างไร
มีคนถามฉันว่าวิธีที่ดีที่สุดในการเรียนรู้ห้องสมุดใหม่คืออะไร? คำตอบของฉันคือการใช้มันในโครงการจริง จะมีความต้องการที่หลากหลายในโครงการจริงซึ่งจะกระตุ้นให้นักพัฒนาสำรวจและวิจัยห้องสมุดใหม่นี้ ในระยะสั้นงานเท่านั้นที่จะกระตุ้นให้คุณสำรวจและเรียนรู้ เช่นเดียวกันสำหรับวันที่ใหม่และเวลา API ของ Java 8 หากต้องการเรียนรู้ห้องสมุดใหม่ของ Java 8 ที่นี่ฉันได้สร้างตัวอย่างที่มุ่งเน้นภารกิจ 20 ครั้ง เริ่มต้นด้วยงานง่าย ๆ เช่นวิธีใช้ห้องสมุดเวลา Java 8 เวลาและวันที่เพื่อเป็นตัวแทนในวันนี้จากนั้นสร้างวันที่สมบูรณ์ตามเวลาและเขตเวลาจากนั้นศึกษาวิธีการปฏิบัติงานที่ใช้งานได้จริงเช่นการพัฒนา แอปพลิเคชั่นเตือนความจำเพื่อค้นหาจำนวนวันก่อนวันที่บางวันเช่นวันเกิดวันครบรอบวันอาทิตย์วันเรียกเก็บเงินถัดไปวันพรีเมี่ยมถัดไปหรือวันหมดอายุบัตรเครดิต
ตัวอย่างที่ 1 วิธีรับวันที่ของวันใน Java 8
มีชั้นเรียนใน Java 8 ที่เรียกว่า LocalDate ซึ่งสามารถใช้เป็นตัวแทนวันที่ของวันนี้ คลาสนี้แตกต่างจาก java.util.date เล็กน้อยเพราะมีเพียงวันที่และไม่มีเวลา ดังนั้นหากคุณต้องการแสดงวันที่โดยไม่รวมเวลาคุณสามารถใช้งานได้
การคัดลอกรหัสมีดังนี้:
localdate วันนี้ = localdate.now ();
เอาท์พุท
วันที่ท้องถิ่นวันนี้: 2014-01-14
คุณจะเห็นว่ามันสร้างวันที่วันนี้โดยไม่มีข้อมูลเวลา นอกจากนี้ยังจัดรูปแบบวันที่แล้วส่งออก
ตัวอย่างที่ 2 วิธีรับปีปัจจุบันเดือนวันใน Java 8
คลาส LocalDate ให้วิธีการที่สะดวกในการแยกคุณลักษณะประจำปีเดือนวันและวันที่อื่น ๆ การใช้วิธีการเหล่านี้คุณสามารถรับแอตทริบิวต์วันที่ใดก็ได้ที่คุณต้องการโดยไม่ต้องใช้คลาสเช่น java.util.calendar:
การคัดลอกรหัสมีดังนี้:
localDate วันนี้ = localDate.now ();
int ปี = วันนี้ getTyear ();
int เดือน = วันนี้ getMonthValue ();
int day = วันนี้ getDayOfMonth ();
System.out.printf ("ปี: %D เดือน: %d วัน: %d /t %n", ปี, เดือน, วัน);
เอาท์พุท
วันที่ท้องถิ่นวันนี้: 2014-01-14
ปี: 2014 เดือน: 1 วัน: 14
อย่างที่คุณเห็นมันเป็นเรื่องง่ายมากที่จะได้รับข้อมูลปีและเดือนใน Java 8 เพียงแค่ใช้วิธี getter ที่สอดคล้องกันโดยไม่มีหน่วยความจำและมันใช้งานง่ายมาก คุณสามารถเปรียบเทียบได้กับวิธีการเขียนแบบเก่าเพื่อรับปีปัจจุบันเดือนและวันใน Java
ตัวอย่างที่ 3 วิธีรับวันที่เฉพาะใน Java 8
ในตัวอย่างแรกเราเห็นว่ามันง่ายมากที่จะสร้างวันที่ของวันผ่านวิธีการคงที่ตอนนี้ () แต่ด้วยวิธีการโรงงานที่มีประโยชน์อื่น ๆ localdate.of () คุณสามารถสร้างวันที่ใดก็ได้ซึ่งยอมรับพารามิเตอร์ ของปีเดือนและวันจากนั้นส่งคืนอินสแตนซ์ LocalDate เทียบเท่า มีข่าวดีอีกประการหนึ่งเกี่ยวกับวิธีการนี้ที่ไม่ได้ทำผิดพลาดใน API ก่อนหน้านี้ ไม่ว่าคุณจะเขียนเกี่ยวกับวันที่ที่นี่คือตัวอย่างด้านล่างแสดงถึงวันที่ 14 มกราคมและไม่มีตรรกะที่ซ่อนอยู่
การคัดลอกรหัสมีดังนี้:
localDate DateOfBirth = localDate.OF (2010, 01, 14);
System.out.println ("วันเดือนปีเกิดของคุณคือ:" + วันที่);
ผลลัพธ์: วันเดือนปีเกิดของคุณคือ: 2010-01-14
จะเห็นได้ว่าวันที่สร้างคือสิ่งที่เราเขียน 14 มกราคม 2014
ตัวอย่างที่ 4 วิธีตรวจสอบว่าสองวันมีค่าเท่ากันใน Java 8
หากคุณพูดถึงงานจริงของการประมวลผลเวลาและวันที่ในความเป็นจริงสิ่งหนึ่งที่พบบ่อยคือการตรวจสอบว่าทั้งสองวันนั้นเท่ากันหรือไม่ คุณอาจพบคำถามเกี่ยวกับวันนี้เป็นวันพิเศษเช่นวันเกิดครบรอบหรือวันหยุด บางครั้งคุณจะได้รับวันที่เพื่อตรวจสอบว่าเป็นวันที่แน่นอนเช่นวันหยุด ตัวอย่างต่อไปนี้จะช่วยให้คุณทำงานประเภทนี้ใน Java 8 อย่างที่คุณคิดว่า LocalDate จะแทนที่วิธี Equals เพื่อเปรียบเทียบวันที่ดังนี้:
การคัดลอกรหัสมีดังนี้:
LocalDate Date1 = localDate.OF (2014, 01, 14);
System.out.printf ("วันนี้ %s และวันที่ 1 s เป็นวันที่เท่ากัน %n", วันนี้, วันที่ 1);
-
เอาท์พุท
วันนี้ 2014-01-14 และวันที่ 1 2014-01-14 เป็นวันเดียวกัน
ในกรณีนี้ทั้งสองวันที่เราเปรียบเทียบมีค่าเท่ากัน ในเวลาเดียวกันหากคุณได้รับสตริงวันที่ที่จัดรูปแบบในรหัสคุณต้องแยกวิเคราะห์เป็นวันที่ก่อนที่คุณจะสามารถเปรียบเทียบได้ คุณสามารถเปรียบเทียบตัวอย่างนี้กับวิธีที่ Java เปรียบเทียบวันที่มาก่อนและคุณจะพบว่ามันน่าตื่นเต้นมาก
ตัวอย่างที่ 5 วิธีการตรวจสอบกิจกรรมที่ซ้ำกันใน Java 8 พูดวันเกิด
มีงานที่ใช้งานได้จริงที่เกี่ยวข้องกับเวลาและวันที่ใน Java ซึ่งจะตรวจสอบเหตุการณ์ที่ซ้ำกันเช่นวันเรียกเก็บเงินรายเดือนวันครบรอบแต่งงานวันชำระคืนรายเดือนหรือวันที่คุณจ่ายเบี้ยประกันทุกปี หากคุณทำงานใน บริษัท อีคอมเมิร์ซจะมีโมดูลที่จะส่งความปรารถนาวันเกิดให้ผู้ใช้และส่งคำทักทายให้พวกเขาในทุกวันหยุดที่สำคัญเช่นคริสต์มาสวันขอบคุณพระเจ้าและในอินเดียอาจเป็นได้ งานเทศกาล. จะตรวจสอบได้อย่างไรว่าเป็นเทศกาลหรือเหตุการณ์ซ้ำใน Java? ใช้ชั้นเรียนประจำวัน ชั้นเรียนนี้ประกอบด้วยเดือนและวันและไม่มีข้อมูลปีซึ่งหมายความว่าคุณสามารถใช้มันเพื่อเป็นตัวแทนของบางวันที่ปรากฏซ้ำ ๆ ทุกปี แน่นอนว่ามีชุดค่าผสมอื่น ๆ เช่นชั้นเรียนประจำปี นอกจากนี้ยังไม่เปลี่ยนรูปแบบและปลอดภัยเหมือนคลาสอื่น ๆ ในห้องสมุดเวลาและวันที่ใหม่และยังเป็นคลาสที่มีค่า ลองใช้ตัวอย่างเพื่อดูวิธีการใช้วันสำหรับวันเพื่อตรวจสอบวันที่ซ้ำกัน:
การคัดลอกรหัสมีดังนี้:
localDate DateOfBirth = localDate.OF (2010, 01, 14);
วันเกิดวันเกิด = monthday.of (dateofbirth.getMonth (), dateofbirth.getdayofmonth ());
Monthday CurrentMonthday = Monthday. จาก (วันนี้);
ถ้า (currentmonthday.equals (วันเกิด)) {
System.out.println ("ผลตอบแทนที่มีความสุขมากมายของวัน !!");
}อื่น{
System.out.println ("ขออภัยวันนี้ไม่ใช่วันเกิดของคุณ");
-
เอาท์พุท: ผลตอบแทนที่มีความสุขมากมายในวันนี้ !!
แม้ว่าปีจะแตกต่างกัน แต่วันนี้เป็นวันเกิดดังนั้นคุณจะเห็นความปรารถนาวันเกิดในผลลัพธ์ คุณสามารถปรับเวลาของระบบและเรียกใช้โปรแกรมเพื่อดูว่ามันเตือนคุณเมื่อวันเกิดครั้งต่อไปของคุณ
ตัวอย่างที่ 6 วิธีรับเวลาปัจจุบันใน Java 8
สิ่งนี้คล้ายกันมากกับการรับวันที่ปัจจุบันในตัวอย่างแรก เวลานี้เราใช้คลาสที่เรียกว่า LocalTime ซึ่งเป็นเวลาที่ไม่มีวันที่และเป็นความสัมพันธ์ใกล้ชิดกับ LocalDate ที่นี่คุณสามารถใช้วิธีการโรงงานคงที่ () เพื่อให้ได้เวลาปัจจุบัน รูปแบบเริ่มต้นคือ HH: MM: SS: NNN โดยที่ NNN คือนาโนวินาที คุณสามารถเปรียบเทียบกับวิธีรับเวลาปัจจุบันใน Java 8 ก่อน
การคัดลอกรหัสมีดังนี้:
LocalTime time = localtime.now ();
เอาท์พุท
เวลาท้องถิ่นตอนนี้: 16: 33: 33.369 // ในชั่วโมง, นาที, วินาที, นาโนวินาที
อย่างที่คุณเห็นเวลาปัจจุบันไม่รวมวันที่เนื่องจาก LocalTime มีเวลาเท่านั้นและไม่มีวันที่
ตัวอย่างที่ 7 วิธีเพิ่มจำนวนชั่วโมงในเวลา
หลายครั้งที่เราต้องเพิ่มชั่วโมงนาทีหรือวินาทีเพื่อคำนวณเวลาในอนาคต Java 8 ไม่เพียง แต่ให้ชั้นเรียนที่ไม่เปลี่ยนรูปแบบและแบบเธรดที่ปลอดภัยเท่านั้น แต่ยังมีวิธีการที่สะดวกกว่าเช่น Plushours () เพื่อแทนที่วิธี Add () ดั้งเดิม โดยวิธีการวิธีการเหล่านี้จะส่งคืนการอ้างอิงไปยังอินสแตนซ์ LocalTime ใหม่เนื่องจาก LocalTime ไม่เปลี่ยนรูปอย่าลืมเก็บข้อมูลอ้างอิงใหม่นี้
การคัดลอกรหัสมีดังนี้:
เวลา localtime = localtime.now ();
localtime newtime = time.plushours (2);
System.out.println ("เวลาหลังจาก 2 ชั่วโมง:" + Newtime);
เอาท์พุท:
เวลาหลังจาก 2 ชั่วโมง: 18: 33: 33.369
คุณจะเห็นว่าเวลาปัจจุบันคือ 16: 33: 33.369 หลังจาก 2 ชั่วโมง ตอนนี้คุณสามารถเปรียบเทียบได้กับวิธีการเพิ่มหรือลดชั่วโมงใน Java คุณสามารถบอกได้ว่าวิธีใดดีกว่าในตอนแรก
ตัวอย่างที่ 8 วิธีรับวันที่หลังจาก 1 สัปดาห์
นี่คล้ายกับตัวอย่างก่อนหน้าของการรับเวลาหลังจาก 2 ชั่วโมงที่นี่เราจะได้เรียนรู้วิธีรับวันที่หลังจาก 1 สัปดาห์ LocalDate ใช้เป็นตัวแทนวันที่โดยไม่มีเวลา เนื่องจาก LocalDate ยังไม่เปลี่ยนแปลงการดำเนินการดัดแปลงใด ๆ จะส่งกลับอินสแตนซ์ใหม่ดังนั้นอย่าลืมบันทึก
การคัดลอกรหัสมีดังนี้:
localdate nextweek = วันนี้. plus (1, chronounit.weeks);
System.out.println ("วันนี้คือ:" + วันนี้);
System.out.println ("วันที่หลังจาก 1 สัปดาห์:" + nextweek);
เอาท์พุท:
วันนี้คือ: 2014-01-14
วันที่หลังจาก 1 สัปดาห์: 2014-01-21
คุณสามารถดูว่าวันที่จะเป็นอย่างไรใน 7 วันนั่นคือหนึ่งสัปดาห์ คุณสามารถใช้วิธีนี้เพื่อเพิ่มเดือนปีชั่วโมงนาทีหรือแม้กระทั่งสิบปีและตรวจสอบชั้นเรียน chronounit ใน Java API เพื่อรับตัวเลือกเพิ่มเติม
ตัวอย่าง 9 วันที่ประมาณหนึ่งปี
นี่คือภาคต่อของตัวอย่างก่อนหน้า ในตัวอย่างข้างต้นเราได้เรียนรู้วิธีการใช้วิธีการของ LocalDate's Plus () เพื่อเพิ่มวันที่สัปดาห์หรือเดือนในวันที่
การคัดลอกรหัสมีดังนี้:
LocalDate ก่อนหน้า = วันนี้ minus (1, chronounit.years);
System.out.println ("วันที่ก่อน 1 ปี:" + ก่อนหน้าปี);
localdate nextyear = วันนี้ plus (1, ปี);
System.out.println ("วันที่หลังจาก 1 ปี:" + nextyear);
เอาท์พุท:
วันที่ก่อน 1 ปี: 2013-01-14
วันที่หลังจาก 1 ปี: 2015-01-14
จะเห็นได้ว่ามีสองปีแล้วหนึ่งในปี 2013 อีกอันในปี 2558 และปีที่ผ่านมาในปี 2014
ตัวอย่างที่ 10 การใช้นาฬิกาใน Java 8
Java 8 มาพร้อมกับคลาสนาฬิกาซึ่งคุณสามารถใช้เพื่อรับเวลาทันทีวันที่หรือเวลาในเขตเวลาที่แน่นอน นาฬิกาสามารถใช้แทน System.currenttimeInmillis () และ Timezone.getDefault ()
การคัดลอกรหัสมีดังนี้:
// ส่งคืนเวลาปัจจุบันตามนาฬิการะบบของคุณและตั้งค่าเป็น UTC
นาฬิกา = นาฬิกา Systemutc ();
System.out.println ("นาฬิกา:" + นาฬิกา);
// ส่งคืนเวลาขึ้นอยู่กับนาฬิกาของนาฬิกาโซนนาฬิกา defaultClock =
นาฬิกา Systemdefaultzone ();
System.out.println ("นาฬิกา:" + นาฬิกา);
เอาท์พุท:
นาฬิกา: SystemClock [z]
นาฬิกา: SystemClock [z]
คุณสามารถเปรียบเทียบนาฬิกานี้กับวันที่ที่ระบุเช่น:
การคัดลอกรหัสมีดังนี้:
คลาสสาธารณะ myclass {
นาฬิกาส่วนตัว;
กระบวนการโมฆะสาธารณะ (LocalDate EventDate) {
if (EventDate.isBefore (localDate.now (นาฬิกา)) {
-
-
-
-
มันค่อนข้างสะดวกถ้าคุณต้องการประมวลผลวันที่ในเขตเวลาที่แตกต่างกัน
ตัวอย่างที่ 11 วิธีการพิจารณาว่าวันที่ก่อนหรือหลังวันที่อื่นใน Java
นี่เป็นงานทั่วไปในโครงการจริง คุณจะบอกได้อย่างไรว่าวันที่ก่อนหรือหลังวันที่อื่นหรือเท่ากัน? ใน Java 8 คลาส LocalDate มีวิธี isbefore () และ isafter () ที่สามารถใช้เพื่อเปรียบเทียบสองวัน หากวันที่เรียกวิธีการเร็วกว่าวันที่ที่กำหนดวิธี isbefore () จะส่งคืนจริง
การคัดลอกรหัสมีดังนี้:
localdate tomorrow = localdate.of (2014, 1, 15);
System.out.println ("พรุ่งนี้มาหลังจากวันนี้");
-
LocalDate เมื่อวาน = วันนี้ minus (1 วัน);
ถ้า (เมื่อวานนี้ (วันนี้)) {
System.out.println ("เมื่อวานนี้เป็นวันก่อนวันนี้");
-
เอาท์พุท:
พรุ่งนี้มาหลังจากวันนี้
เมื่อวานนี้เป็นวันก่อนวันนี้
จะเห็นได้ว่าวันที่ใน Java 8 นั้นค่อนข้างง่าย ไม่จำเป็นต้องใช้คลาสอื่นเช่นปฏิทินเพื่อให้งานที่คล้ายกันเสร็จสมบูรณ์
ตัวอย่างที่ 12 การจัดการโซนเวลาที่แตกต่างกันใน Java 8
Java 8 ไม่เพียง แต่แยกวันและเวลา แต่ยังมีเขตเวลา ขณะนี้มีคลาสที่เกี่ยวข้องกับโซนเวลาหลายชุด มันเทียบเท่ากับชั้นเรียน Gregoriancalendar ก่อน Java 8 การใช้คลาสนี้คุณสามารถแปลงเวลาท้องถิ่นเป็นเวลาที่สอดคล้องกันในเขตเวลาอื่นเช่นตัวอย่างต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
// วันที่และเวลาที่มีเขตเวลาใน Java 8 Zoneid America = Zoneid.of ("America/new_york");
localDateTime localtDateandtime = localDatetime.now ();
ZONEDDATETIME DATEANDTIMEINNEWYORK = ZONEDDATETIME.OF (LOCALTDATEANDTIME, America);
System.out.println ("วันที่และเวลาปัจจุบันในเขตเวลาเฉพาะ:" + DateAndTimeInneWyork);
เอาท์พุท:
วันที่และเวลาปัจจุบันในเขตเวลาเฉพาะ: 2014-01-14T16: 33: 33.373-05: 00 [America/New_york]
คุณสามารถเปรียบเทียบกับวิธีการก่อนหน้านี้ในการแปลงเวลาท้องถิ่นเป็นเวลา GMT อย่างไรก็ตามก่อนที่ Java 8 อย่าสร้างข้อความที่สอดคล้องกับเขตเวลาผิดมิฉะนั้นคุณจะพบข้อยกเว้นดังกล่าว:
การคัดลอกรหัสมีดังนี้:
ข้อยกเว้นในเธรด "Main Main" java.time.zone.zonerulesexception: ID โซนเวลาที่ไม่รู้จัก: เอเชีย/โตเกียว
ที่ java.time.zone.zonerulesprovider.getProvider (zonerulesprovider.java:272)
ที่ java.time.zone.zonerulesprovider.getRules (Zonerulesprovider.java:227)
ที่ java.time.zoneregion.ofid (zoneregion.java:120)
ที่ java.time.zoneid.of (zoneid.java:403)
ที่ java.time.zoneid.of (zoneid.java:351)
ตัวอย่างที่ 13 วิธีแสดงวันที่คงที่เช่นเวลาหมดอายุของบัตรเครดิต
เช่นเดียวกับ Monthday แสดงถึงวันที่เกิดขึ้นประจำปีคือการรวมกันอีกครั้งซึ่งแสดงถึงวันที่เช่นวันที่ชำระคืนบัตรเครดิตวันครบกำหนดเงินฝากคงที่วันครบกำหนดของตัวเลือกวันครบกำหนด คุณสามารถใช้คลาสนี้เพื่อค้นหาว่ามีกี่วันในเดือนนั้น
การคัดลอกรหัสมีดังนี้:
Yearmonth CurrentYearmonth = Yearmonth.now ();
Yearmonth CreditCardExpiRy = Yearmonth.OF (2018, เดือนกุมภาพันธ์);
System.out.printf ("บัตรเครดิตของคุณหมดอายุใน %S %N", CreditCardExpiRy);
เอาท์พุท:
วันในเดือนปี 2557-2554: 31
บัตรเครดิตของคุณหมดอายุในปี 2018-02
ตัวอย่างที่ 14 วิธีตรวจสอบปีกระโดดใน Java 8
สิ่งนี้ไม่ซับซ้อน หากคุณยังต้องการสร้างวงล้อขึ้นมาใหม่คุณสามารถดูรหัสนี้ได้
การคัดลอกรหัสมีดังนี้:
if (วันนี้ ISLEAPYEAR ()) {
System.out.println ("ปีนี้เป็นปีกระโดด");
}อื่น {
System.out.println ("2014 ไม่ใช่ปีกระโดด");
-
ผลผลิต: 2014 ไม่ใช่ปีกระโดด
คุณสามารถตรวจสอบอีกไม่กี่ปีเพื่อดูว่าผลลัพธ์ถูกต้องหรือไม่
ตัวอย่างที่ 15 มีกี่วันและเดือนที่รวมอยู่ระหว่างสองวัน
งานทั่วไปอีกประการหนึ่งคือการคำนวณจำนวนวันสัปดาห์หรือปีที่รวมอยู่ระหว่างสองวันที่กำหนด คุณสามารถใช้คลาส java.time.period เพื่อทำฟังก์ชั่นนี้ให้เสร็จสมบูรณ์ ในตัวอย่างต่อไปนี้เราจะคำนวณจำนวนเดือนที่วันที่ปัจจุบันแยกออกจากวันที่ในอนาคต
การคัดลอกรหัสมีดังนี้:
localdate java8release = localdate.of (2014, เดือนมีนาคม, 14);
ระยะเวลา PeriodOnextJavarelease =
ช่วงเวลาระหว่าง (วันนี้ java8release);
System.out.println ("เดือนที่เหลือระหว่างวันนี้ถึง Java 8 Release:" + PeriodteNextjavarelease.getMonths ());
เอาท์พุท:
เดือนที่เหลือระหว่างวันนี้ถึง Java 8 Release: 2
อย่างที่คุณเห็นเดือนนี้คือเดือนมกราคมและวันที่วางจำหน่ายของ Java 8 คือเดือนมีนาคมดังนั้นจึงมี 2 เดือนระหว่างพวกเขา
ตัวอย่างที่ 16 วันที่และเวลาด้วยการชดเชยเขตเวลา
ใน Java 8 คุณสามารถใช้คลาส ZoneOffset เพื่อแสดงถึงเขตเวลาที่แน่นอนเช่นอินเดียคือ GMT หรือ UTC5: 30 และคุณสามารถใช้วิธีการคงที่ zoneOffset.of () เพื่อให้ได้โซนเวลาที่สอดคล้องกัน ตราบใดที่คุณได้รับการชดเชยนี้คุณสามารถใช้ LocalDateTime และชดเชยนี้เพื่อสร้าง OffsetDateTime
การคัดลอกรหัสมีดังนี้:
LocalDateTime DateTime = LocalDateTime.OF (2014, เดือนมกราคม, 14, 19, 30);
zoneOffset Offset = zoneOffset.of ("+05:30");
OffsetDateTime Date = OffsetDateTime.OF (DateTime, Offset);
System.out.println ("วันที่และเวลาที่มีการชดเชยเขตเวลาใน Java:" + วันที่);
เอาท์พุท:
วันที่และเวลาที่มีการชดเชยเขตเวลาใน Java: 2014-01-14T19: 30+05: 30
คุณจะเห็นว่าเวลาและวันที่ปัจจุบันเกี่ยวข้องกับเขตเวลา อีกประเด็นหนึ่งคือ OffsetDatetime เป็นหลักสำหรับเครื่องจักรที่จะเข้าใจ
ตัวอย่างที่ 17 วิธีรับการประทับเวลาปัจจุบันใน Java 8
หากคุณยังจำวิธีที่จะได้รับการประทับเวลาปัจจุบันก่อน Java 8 ตอนนี้เป็นเค้กชิ้นหนึ่ง คลาสทันทีมีวิธีการโรงงานคงที่ในขณะนี้ () ที่สามารถส่งคืนการประทับเวลาปัจจุบันดังต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
timestamp ทันที = ทันทีตอน ();
System.out.println ("ค่าของเวลานี้คืออะไร" + การประทับเวลา);
เอาท์พุท:
มูลค่าของทันทีนี้ 2014-01-14T08: 33: 33.379Z
จะเห็นได้ว่าการประทับเวลาปัจจุบันมีวันที่และเวลาซึ่งคล้ายกับ java.util.date มาก แปลงระหว่างพวกเขาตัวอย่างเช่นวันที่ (ทันที) ใช้เพื่อแปลงทันทีเป็น java.util.date และ date.toinstant () แปลงวันที่เป็นวันที่ทันที
ตัวอย่างที่ 18 วิธีการแยกวิเคราะห์/วันที่โดยใช้รูปแบบที่กำหนดไว้ล่วงหน้าใน Java 8
ก่อนที่ Java 8 การจัดรูปแบบเวลาและวันที่เป็นงานทางเทคนิค ต้องขอบคุณตัวแปรเธรดท้องถิ่นทำให้สามารถใช้งานได้ในสภาพแวดล้อมแบบมัลติเธรด แต่ Java ได้รักษาสถานะนี้ไว้เป็นเวลานาน เวลานี้แนะนำวันที่และเวลาที่ปลอดภัยของเธรดใหม่ นอกจากนี้ยังมาพร้อมกับรูปแบบที่กำหนดไว้ล่วงหน้ารวมถึงรูปแบบวันที่ที่ใช้กันทั่วไป ตัวอย่างเช่นในตัวอย่างนี้เราใช้รูปแบบพื้นฐานที่กำหนดไว้ล่วงหน้าซึ่งจะจัดรูปแบบ 14 กุมภาพันธ์ 2014 เป็น 20140114
การคัดลอกรหัสมีดังนี้:
String dayaftertommorrow = "20140116";
localdate formated = localdate.parse (dayaftertommorm
Datetimeformatter.basic_iso_date);
System.out.printf ("วันที่ที่สร้างขึ้นจากสตริง %s คือ %s %n", dayaftertommorm, จัดรูปแบบ);
เอาท์พุท:
วันที่สร้างจาก String 20140116 คือ 2014-01-16
คุณจะเห็นว่าวันที่ที่สร้างขึ้นตรงกับค่าของสตริงที่ระบุซึ่งหมายความว่ารูปแบบวันที่แตกต่างกันเล็กน้อย
ตัวอย่างที่ 19 วิธีใช้รูปแบบที่กำหนดเองเพื่อแยกวิเคราะห์วันที่ใน Java
ในตัวอย่างข้างต้นเราใช้ตัวจัดรูปแบบเวลาในตัวเพื่อวิเคราะห์สตริงวันที่ แน่นอนว่ารูปแบบที่กำหนดไว้ล่วงหน้านั้นดีจริง ๆ แต่บางครั้งคุณอาจต้องใช้รูปแบบวันที่ที่กำหนดเอง รูปแบบวันที่ในตัวอย่างต่อไปนี้คือ "MMM DD YYYY" คุณสามารถส่งผ่านรูปแบบใด ๆ ไปยังวิธีการของ Pattern Static ของ DateTimeFormatter () ซึ่งส่งคืนอินสแตนซ์โดยมีค่าตามตัวอักษรของรูปแบบนี้เหมือนกับในตัวอย่างก่อนหน้า ตัวอย่างเช่น M ยังคงแสดงถึงเดือนในขณะที่ M ยังคงเป็นเซ็กเมนต์ โหมดที่ไม่ถูกต้องจะส่งข้อยกเว้น DateTimeParseException แต่ถ้าเป็นข้อผิดพลาดเชิงตรรกะเช่นการใช้ M เมื่อถึงเวลาที่จะใช้ M ไม่มีอะไรทำ
การคัดลอกรหัสมีดังนี้:
String GoodFriday = "Apr 18 2014";
พยายาม {
datetimeformatter formatter = dateTimeFormatter.ofpattern ("mmm dd yyyy");
LocalDate Holiday = localDate.Parse (GoodFriday, Formatter);
System.out.printf ("ประสบความสำเร็จในการแยกวิเคราะห์สตริง %s, วันที่คือ %s %n", goodfriday, วันหยุด);
} catch (dateTimeparseexception ex) {
System.out.printf ("%s ไม่สามารถแยกได้!%n", goodfriday);
Ex.PrintStackTrace ();
-
เอาท์พุท:
การแยกวิเคราะห์สตริงที่ประสบความสำเร็จ 18 เม.ย. 2014 วันที่คือ 2014-04-18
คุณจะเห็นว่าค่าของวันที่ตรงกับสตริงที่ส่งผ่าน แต่รูปแบบแตกต่างกัน
ตัวอย่างที่ 20 วิธีการจัดรูปแบบวันที่และแปลงเป็นสตริงใน Java 8
ในสองตัวอย่างก่อนหน้านี้แม้ว่าเราจะใช้คลาส DatetimeFormatter แต่เราจึงแยกแยะสตริงวันที่เป็นหลัก ในตัวอย่างนี้เราจะทำสิ่งที่ตรงกันข้าม ที่นี่เรามีอินสแตนซ์ของคลาส LocalDateTime ซึ่งเราต้องการแปลงเป็นสตริงวันที่ที่จัดรูปแบบ นี่เป็นวิธีที่ง่ายที่สุดและสะดวกที่สุดในการแปลงวันที่เป็นสตริงในชวา ตัวอย่างต่อไปนี้จะส่งคืนสตริงที่จัดรูปแบบ เช่นเดียวกับตัวอย่างก่อนหน้านี้คือเรายังคงต้องใช้สตริงรูปแบบที่ระบุเพื่อสร้างอินสแตนซ์ของคลาส DatetimeFormatter แต่การโทรไม่ใช่วิธีการแยกวิเคราะห์ของคลาส localDate แต่วิธีการรูปแบบ () วิธีนี้จะส่งคืนสตริงที่แสดงถึงวันที่ปัจจุบันและรูปแบบที่สอดคล้องกันถูกกำหนดไว้ในอินสแตนซ์ DateTimeFormatter ที่เข้ามา
การคัดลอกรหัสมีดังนี้:
LocalDateTime MEACHDATE = localDatetime.now ();
พยายาม {
dateTimeFormatter format = dateTimeFormatter.ofpattern ("MMM DD YYYY HH: MM A");
String Landing = earrivalDate.Format (รูปแบบ);
System.out.printf ("มาถึง: %s %n", Landing);
} catch (datetimeException ex) {
System.out.printf ("%s ไม่สามารถจัดรูปแบบ!%n" มาถึง);
Ex.PrintStackTrace ();
-
เอาท์พุท: มาถึงที่: 14 มกราคม 2014 04:33 น.
จะเห็นได้ว่าเวลาปัจจุบันแสดงโดยรูปแบบ "MMM DD Yyyy HH: MM A" ซึ่งมีเดือนที่มีตัวอักษรสามตัวและเวลาที่แสดงโดย AM และ PM
ประเด็นสำคัญหลายประการของวันที่และเวลา API ใน Java 8
หลังจากอ่านตัวอย่างเหล่านี้ฉันเชื่อว่าคุณมีความเข้าใจบางอย่างเกี่ยวกับเวลาและวันที่ใหม่ของ Java 8 ตอนนี้เรามาตรวจสอบองค์ประกอบสำคัญบางประการเกี่ยวกับ API ใหม่นี้
1. ให้ javax.time.zoneid เพื่อจัดการโซนเวลา
2. ให้ชั้นเรียน LocalDate และ LocalTime
3. คลาสทั้งหมดในเวลาและวันที่ใหม่ API ใน Java 8 นั้นไม่เปลี่ยนรูปและมีความปลอดภัยซึ่งเป็นสิ่งที่ตรงกันข้ามกับวันที่ก่อนหน้าและ APIs ปฏิทินที่พวกเขาเป็นเหมือน Java.util.Date และ SimpledateFormat -ปลอดภัย.
4. จุดสำคัญมากในเวลาและวันที่ใหม่ API คือการกำหนดแนวคิดพื้นฐานของเวลาและวันที่อย่างชัดเจนเช่นเวลาทันทีระยะเวลาวันที่เวลาเวลาเขตเวลาและช่วงเวลา พวกเขาทั้งหมดขึ้นอยู่กับระบบปฏิทิน ISO
5. นักพัฒนา Java ทุกคนควรรู้อย่างน้อยห้าคลาสเหล่านี้ใน API ใหม่นี้:
5.1) ทันทีที่แสดงถึงการประทับเวลาเช่น 2014-01-14T02: 20: 13.592Z ซึ่งสามารถรับได้จาก Java.time.Clock คลาสเช่นนี้: current = clock.system (zoneid.of ("เอเชีย / เอเชีย / โตเกียว ")). ทันที ();
5.2) LocalDate แสดงวันที่ที่ไม่มีเวลาเช่น 2014-01-14 สามารถใช้ในการจัดเก็บวันเกิดวันครบรอบวันที่เหนี่ยวนำและอื่น ๆ
5.3) LocalTime แสดงเวลาโดยไม่มีวันที่
5.4) LocalDatetime มีเวลาและวันที่ แต่ไม่มีการชดเชยกับเขตเวลา
5.5) ZONEDDATETIME นี้เป็นเวลาเต็มเวลากับการปรับเขตเวลาตามเวลา UTC/Greenwich
1. แพ็คเกจหลักของไลบรารีนี้คือ java.time ซึ่งมีคลาสที่แสดงวันที่เวลาเวลาและระยะเวลา มันมีสองแพ็คเกจหนึ่งคือ java.time.foramt ซึ่งเห็นได้ชัดว่าสิ่งนี้ใช้สำหรับและอื่น ๆ คือ java.time.temporal ซึ่งสามารถเข้าถึงฟิลด์ต่างๆจากระดับที่ต่ำกว่า
2. โซนเวลาหมายถึงภูมิภาคบนโลกที่ใช้เวลามาตรฐานเดียวกัน แต่ละโซนเวลามีตัวระบุที่ไม่ซ้ำกันและยังมีรูปแบบภูมิภาค/เมือง (เอเชีย/โตเกียว) และเวลาชดเชยเริ่มต้นจากเวลากรีนวิช ตัวอย่างเช่นเวลาชดเชยในโตเกียวคือ +09: 00
3. OffsetDateTime Class จริง ๆ แล้วมี LocalDateTime และ ZoneOffset มันถูกใช้เพื่อเป็นตัวแทนวันที่สมบูรณ์ (ปีเดือนวัน) และเวลา (ชั่วโมง, นาที, นาโนวินาที) ที่มีการชดเชยเวลากรีนวิช (+/- ชั่วโมง: นาทีเช่น +06: 00 หรือ -08: 00)
4. คลาส DateTimeFormatter ใช้ในการจัดรูปแบบและแยกวิเคราะห์วันที่ใน Java ซึ่งแตกต่างจาก SimpledateFormat มันไม่เปลี่ยนรูปและปลอดภัยและสามารถกำหนดให้กับตัวแปรคงที่หากจำเป็น คลาส DateTimeFormatter ให้ Formatters ที่กำหนดไว้ล่วงหน้ามากมายและคุณยังสามารถปรับแต่งรูปแบบที่คุณต้องการ แน่นอนตามอนุสัญญามันยังมีวิธีการ parse () ที่ใช้ในการแปลงสตริงเป็นวันที่และหากมีข้อผิดพลาดใด ๆ ในระหว่างการแปลงมันจะโยนข้อยกเว้น datetimeparseException ในทำนองเดียวกันคลาส DateFormatter ยังมีวิธีการจัดรูปแบบ () สำหรับวันที่การจัดรูปแบบ
5. กล่าวอีกนัยหนึ่งรูปแบบวันที่สองของ "MMM D YYYY" และ "MMM DD YYYY" ก็แตกต่างกันเล็กน้อย ผู้ที่เข้ามาใน "2 ม.ค. 2014" จะรายงานข้อผิดพลาดเพราะคาดว่าตัวละครสองตัวจะเข้ามาตั้งแต่เดือน ในการแก้ปัญหานี้หากวันนั้นเป็นตัวเลขหลักเดียวคุณต้องทำขึ้น 0 ด้านหน้าตัวอย่างเช่น "2 ม.ค. 2014" ควรเปลี่ยนเป็น "มกราคม 02 2014"
นั่นคือทั้งหมดที่เกี่ยวกับ Java 8 เวลาและวันที่ใหม่ API ตัวอย่างสั้น ๆ เหล่านี้เพียงพอที่จะเข้าใจคลาสใหม่ใน API ใหม่นี้ เนื่องจากมีการอธิบายตามงานจริงเมื่อคุณพบงานใน Java ที่ต้องดำเนินการตามเวลาและวันที่คุณไม่จำเป็นต้องค้นหาอีกต่อไป เราเรียนรู้วิธีการสร้างและแก้ไขอินสแตนซ์วันที่ นอกจากนี้เรายังได้เรียนรู้เกี่ยวกับความแตกต่างระหว่างวันที่บริสุทธิ์วันที่บวกเวลาวันที่บวกโซนเวลารู้วิธีการเปรียบเทียบสองวันและวิธีการค้นหาวันที่กำหนดในวันที่กำหนดเช่นวันเกิดปีถัดไปวันครบรอบหรือวันประกัน นอกจากนี้เรายังได้เรียนรู้วิธีการแยกวิเคราะห์และจัดรูปแบบวันที่ใน Java 8 ในแบบที่ปลอดภัยจากเธรดโดยไม่ต้องใช้ตัวแปรเธรดท้องถิ่นหรือไลบรารีบุคคลที่สาม API ใหม่มีความสามารถสำหรับงานที่เกี่ยวข้องกับเวลาและวันที่