TL; DR
ใช้java.time.Instant
คลาสเพื่อแยกวิเคราะห์ข้อความในรูปแบบ ISO 8601 มาตรฐานซึ่งแสดงถึงช่วงเวลาใน UTC
Instant.parse( "2010-10-02T12:23:23Z" )
ISO 8601
รูปแบบนั้นถูกกำหนดโดยมาตรฐาน ISO 8601สำหรับรูปแบบสตริงวันที่และเวลา
ทั้งสอง:
…ใช้รูปแบบ ISO 8601 โดยค่าเริ่มต้นสำหรับการแยกและสร้างสตริง
โดยทั่วไปคุณควรหลีกเลี่ยงการใช้คลาสjava.util.Date /.Calendar & java.text.SimpleDateFormat อันเก่าเนื่องจากมีปัญหายุ่งยากสับสนและมีข้อบกพร่อง หากจำเป็นสำหรับการทำงานร่วมกันคุณสามารถแปลงไปมาได้
java.time
สร้างขึ้นใน Java 8 และใหม่กว่าเป็นเฟรมเวิร์กjava.timeใหม่ แรงบันดาลใจจากJoda เวลาที่กำหนดโดยJSR 310และขยายโดยThreeTen-พิเศษโครงการ
Instant instant = Instant.parse( "2010-10-02T12:23:23Z" ); // `Instant` is always in UTC.
แปลงเป็นคลาสเก่า
java.util.Date date = java.util.Date.from( instant ); // Pass an `Instant` to the `from` method.
เขตเวลา
หากจำเป็นคุณสามารถกำหนดเขตเวลาได้
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Define a time zone rather than rely implicitly on JVM’s current default time zone.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId ); // Assign a time zone adjustment from UTC.
แปลง.
java.util.Date date = java.util.Date.from( zdt.toInstant() ); // Extract an `Instant` from the `ZonedDateTime` to pass to the `from` method.
Joda เวลา
UPDATE: โครงการ Joda-Time อยู่ในโหมดบำรุงรักษา ทีมให้คำแนะนำการโยกย้ายไปยังคลาสjava.time
นี่คือตัวอย่างโค้ดใน Joda-Time 2.8
org.joda.time.DateTime dateTime_Utc = new DateTime( "2010-10-02T12:23:23Z" , DateTimeZone.UTC ); // Specifying a time zone to apply, rather than implicitly assigning the JVM’s current default.
แปลงเป็นคลาสเก่า โปรดทราบว่าเขตเวลาที่กำหนดจะสูญหายไปในการแปลงเนื่องจาก juDate ไม่สามารถกำหนดเขตเวลาได้
java.util.Date date = dateTime_Utc.toDate(); // The `toDate` method converts to old class.
เขตเวลา
หากจำเป็นคุณสามารถกำหนดเขตเวลาได้
DateTimeZone zone = DateTimeZone.forID( "America/Montreal" );
DateTime dateTime_Montreal = dateTime_Utc.withZone ( zone );
เกี่ยวกับjava.time
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยังjava.timeชั้นเรียน
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310
คุณสามารถแลกเปลี่ยนวัตถุjava.timeโดยตรงกับฐานข้อมูลของคุณ ใช้ไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่า ไม่จำเป็นต้องใช้สตริงไม่จำเป็นต้องมีjava.sql.*
คลาส
จะรับคลาส java.time ได้ที่ไหน?
- Java SE 8 , Java SE 9และใหม่กว่า
- Built-in
- เป็นส่วนหนึ่งของ Java API มาตรฐานที่มีการใช้งานแบบรวม
- Java 9 เพิ่มคุณสมบัติและการแก้ไขเล็กน้อย
- Java SE 6และ Java SE 7
- มากของการทำงาน java.time จะกลับรังเพลิง Java 6 และ 7 ในThreeTen-ย้ายกลับ
- Android
- การใช้งานชุดบันเดิล Android รุ่นต่อมาของคลาส java.time
- สำหรับก่อนหน้านี้ Android (<26) ที่ThreeTenABPโครงการปรับThreeTen-ย้ายกลับ (ดังกล่าวข้างต้น) ดูวิธีการใช้ ThreeTenABP … .
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย