Java 8 ได้เพิ่มอินเทอร์เฟซ LocalDate และ LocalTime ทำไมคุณต้องพัฒนา APIs ชุดใหม่ที่จัดการกับวันที่และเวลา? เพราะ java.util.date เก่าใช้ยากจริงๆ
Java.util.date เดือนเริ่มตั้งแต่ 0 มกราคมคือ 0, 0 ธันวาคมคือ 11 มันผิดปกติ! java.time.localdate เปลี่ยนเป็น enum สำหรับทั้งเดือนและสัปดาห์ดังนั้นจึงเป็นไปไม่ได้ที่จะใช้อย่างไม่ถูกต้อง
ทั้ง Java.util.date หรือ SimpledateFormatter ไม่ปลอดภัยในขณะที่ LocalDate และ LocalTime นั้นเหมือนกับสตริงพื้นฐานที่สุดและไม่เพียง แต่ไม่เพียง แต่จะสามารถแก้ไขได้
java.util.date เป็น "อินเทอร์เฟซสากล" ที่มีวันที่เวลาและมิลลิวินาที หากคุณต้องการใช้ java.util.date ในการจัดเก็บวันที่หรือเก็บเวลาเพียงอย่างเดียวคุณเท่านั้นที่คุณรู้ว่าส่วนใดของข้อมูลมีประโยชน์และส่วนใดของข้อมูลที่ไม่มีประโยชน์ ใน Java 8 ใหม่วันที่และเวลาถูกแบ่งออกเป็น LocalDate และ LocalTime อย่างชัดเจน LocalDate ไม่สามารถมีเวลาและ LocalTime ไม่ได้มีวันที่ แน่นอน LocalDatetime สามารถรวมทั้งวันที่และเวลา
เหตุผลที่อินเทอร์เฟซใหม่ดีกว่าคือต้องคำนึงถึงการดำเนินการของวันที่และเวลาและมักจะเกิดขึ้นเมื่อผลักไปข้างหน้าหรือย้อนกลับเป็นเวลาสองสามวัน การใช้ java.util.date กับปฏิทินต้องใช้รหัสจำนวนมากในการเขียนและนักพัฒนาทั่วไปอาจไม่สามารถเขียนได้อย่างถูกต้อง
วันท้องถิ่น
มาดูวิธีใช้ LocalDate ใหม่:
// รับวันที่ปัจจุบัน: localDate วันนี้ = localDate.now (); //-> 2014-12-24 // รับวันที่ตามปีเดือนและวันธันวาคมคือ 12: localdate crisismas = localdate.of (2014, 12, 25); //-> 2014-12-25 // รับวันที่ปัจจุบันตามสตริง: localDate endoffeb = localDate.Parse ("2014-02-28"); // ตรวจสอบอย่างเคร่งครัดตาม ISO YYYY-MM-DD, 02 ไม่ได้รับอนุญาตให้เขียนเป็น 2 แน่นอนนอกจากนี้ยังมีวิธีการโอเวอร์โหลดที่ช่วยให้คุณกำหนดรูปแบบด้วยตัวเอง localdate.parse ("2014-02-29"); // ไม่สามารถส่งวันที่ไม่ถูก
มักจะพบการแปลงวันที่เช่น:
// ใช้เวลาวันแรกของเดือนนี้: localdate firstdayofthismonth = วันนี้ด้วย (temporaladjusters.firstdayfmonth ()); // 2014-12-01 // ใช้วันที่สองของเดือนนี้: localdate seconddayofthismonth = วันนี้ withdayofmonth (2); // 2014-12-02 // ใช้วันสุดท้ายของเดือนนี้และคุณไม่จำเป็นต้องคำนวณอีกต่อไปว่าเป็น 28, 29, 30 หรือ 31: LocalDate LastdayOfthismonth = วันนี้ด้วย (temporaladjusters.lastdayofmonth ()); // 2014-12-31 // ใช้เวลาในวันถัดไป: LocalDate FirstDayOf2015 = LastdayOfthismonth.PlusDays (1); // มันจะกลายเป็น 2015-01-01 // ใช้วันจันทร์แรกในเดือนมกราคม 2558 และการคำนวณนี้ใช้ปฏิทินเพื่อฆ่าเซลล์สมองจำนวนมาก: LocalDate FirstMondayof2015 = localDate.parse ("2015-01-01") // 2015-01-05 เวลาท้องถิ่น
LocalTime มีเวลาเท่านั้น ฉันจะแสดงเวลากับ java.util.date ก่อนได้อย่างไร คำตอบคือแกล้งทำเป็นเพิกเฉยต่อวันที่
LocalTime มีมิลลิวินาที:
localtime now = localtime.now (); // 11: 09: 09.240
คุณอาจต้องการล้างมิลลิวินาที:
localtime now = localtime.now (). withnano (0)); // 11:09:09
เวลาในการก่อสร้างก็ง่ายมาก:
localtime zero = localtime.of (0, 0, 0); // 00:00:00
localtime mid = localtime.parse ("12:00:00"); // 12:00:00
เวลาได้รับการยอมรับในรูปแบบ ISO แต่สามารถระบุสามรูปแบบต่อไปนี้:
• 12: 00
• 12: 01: 02
• 12: 01: 02.345
JDBC
การแมป JDBC ล่าสุดจะเชื่อมโยงประเภทวันที่ของฐานข้อมูลกับ Java 8: ประเภทใหม่:
sql -> java
-
วันที่ -> localdate
เวลา -> LocalTime
Timestamp -> LocalDatetime
จะไม่มีกรณีอีกต่อไปที่บางส่วนของวันที่หรือเวลาถูกแมปกับ java.util.date ซึ่งบางส่วนของวันที่หรือเวลาคือ 0
ข้างต้นเป็นวิธีการจัดการวันที่และเวลาใน Java 8 แนะนำให้คุณรู้จักโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับคุณทันเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!