TL; DR
คำตอบอื่น ๆ ล้าสมัยไปแล้วของ Java 8
Instant // Represent a moment in UTC.
.parse( "2013-09-29T18:46:19Z" ) // Parse text in standard ISO 8601 format where the `Z` means UTC, pronounces “Zulu”.
.atZone( // Adjust from UTC to a time zone.
ZoneId.of( "Asia/Kolkata" )
) // Returns a `ZonedDateTime` object.
ISO 8601
รูปแบบสตริงของคุณเกิดขึ้นเพื่อให้สอดคล้องกับมาตรฐาน ISO 8601มาตรฐาน มาตรฐานนี้กำหนดรูปแบบที่เหมาะสมสำหรับการแสดงค่าวันที่และเวลาต่าง ๆ เป็นข้อความ
java.time
คลาสเก่าjava.util.Date
/ .Calendar
และjava.text.SimpleDateFormat
คลาสได้รับการแทนที่ด้วยเฟรมเวิร์ก java.time ที่สร้างขึ้นใน Java 8 และใหม่กว่า ดูการสอน หลีกเลี่ยงคลาสเก่าเนื่องจากพวกเขาพิสูจน์แล้วว่าได้รับการออกแบบไม่ดีสับสนและลำบาก
ส่วนหนึ่งของการออกแบบที่ไม่ดีในชั้นเรียนเก่าได้กัดคุณโดยที่toString
วิธีการนี้ใช้เขตเวลาเริ่มต้นปัจจุบันของ JVM เมื่อสร้างการแสดงข้อความของค่าวันที่และเวลาใน UTC (GMT) เจตนาดี แต่สับสน
คลาส java.time ใช้รูปแบบ ISO 8601 โดยค่าเริ่มต้นเมื่อแยกวิเคราะห์ / สร้างข้อความที่เป็นตัวแทนของค่าวันที่และเวลา ดังนั้นไม่จำเป็นต้องระบุรูปแบบการแยกวิเคราะห์
Instant
เป็นช่วงเวลาบนไทม์ไลน์ในส่วนUTC
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
คุณสามารถใช้เขตเวลาตามต้องการเพื่อสร้างZonedDateTime
วัตถุ
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );