TL; DR
Instant.ofEpochMilli( 1_322_018_752_992L ) // Parse count of milliseconds-since-start-of-1970-UTC into an `Instant`.
.atZone( ZoneId.of( "Africa/Tunis" ) ) // Assign a time zone to the `Instant` to produce a `ZonedDateTime` object.
รายละเอียด
คำตอบอื่น ๆ ใช้คลาสที่ล้าสมัยหรือไม่ถูกต้อง
หลีกเลี่ยงคลาสวันที่เก่าเช่น java.util.Date/.Calendar พวกเขาได้พิสูจน์แล้วว่าได้รับการออกแบบไม่ดีสับสนและลำบาก
java.time
java.timeกรอบมาสร้างเป็น Java 8 และต่อมา มากของการทำงานเป็นbackported ชวา 6 & 7และต่อไปปรับให้เข้ากับ Android ทำโดยคนกลุ่มเดียวกันกับที่เคยทำJoda-Time Joda
Instant
เป็นช่วงเวลาบนไทม์ไลน์ในส่วนUTCมีความละเอียดของนาโนวินาที ยุคของมันคือช่วงเวลาแรกของปี 1970 ใน UTC
สมมติว่าการป้อนข้อมูลของคุณนับมิลลิวินาทีจาก 1970-01-01T00 A: 00: 00Z (ไม่ชัดเจนในคำถาม) จากนั้นเราสามารถ instantiate ได้อย่างง่ายดายInstant
Instant instant = Instant.ofEpochMilli( 1_322_018_752_992L );
instant.toString (): 2011-11-23T03: 25: 52.992Z
Z
ในการที่มาตรฐานISO 8601สตริงที่จัดรูปแบบสั้นสำหรับZulu
และวิธีการUTC UTC
สมัครโซนเวลาที่ใช้ชื่อโซนเวลาที่เหมาะสมZonedDateTime
ที่จะได้รับ
ZoneId zoneId = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( zoneId );
ดูนี้ใช้รหัสสดที่ IdeOne.com
Asia/Kolkata
เขตเวลา ?
ฉันคาดเดาว่าคุณมีเขตเวลาอินเดียที่มีผลต่อรหัสของคุณ เรามาดูกันที่นี่ที่ปรับลงในAsia/Kolkata
เขตเวลาทำให้เวลาของวันเดียวกับที่คุณรายงานซึ่งเป็นห้าชั่วโมงครึ่งข้างหน้าของมูลค่า08:55
UTC ของเรา03:25
2011-11-23T08: 55: 52.992 + 05: 30 [เอเชีย / โกลกาตา]
โซนเริ่มต้น
คุณสามารถใช้โซนเวลาเริ่มต้นปัจจุบันของ JVM ระวังที่เริ่มต้นสามารถเปลี่ยนแปลงได้ในช่วงเวลาใดช่วงรันไทม์ รหัสใด ๆ ในเธรดของแอพใด ๆ ภายใน JVM สามารถเปลี่ยนค่าเริ่มต้นปัจจุบันได้ หากสำคัญให้ถามผู้ใช้สำหรับเขตเวลาที่ต้องการ / ที่คาดไว้
ZoneId zoneId = ZoneId.systemDefault();
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
เกี่ยวกับjava.time
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยังjava.timeชั้นเรียน
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปกJSR 310
ด้วยไดรเวอร์ JDBC ที่สอดคล้องกับJDBC 4.2หรือใหม่กว่าคุณสามารถแลกเปลี่ยนออบเจ็กต์java.timeโดยตรงกับฐานข้อมูลของคุณ ไม่จำเป็นต้องใช้สตริงหรือคลาส 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
The ThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย