tl; dr
Jawaban lainnya sudah ketinggalan zaman pada 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
Format string Anda kebetulan mematuhi standar ISO 8601 . Standar ini mendefinisikan format yang masuk akal untuk mewakili berbagai nilai waktu tanggal sebagai teks.
waktu java
Kelas lama java.util.Date
/ .Calendar
dan java.text.SimpleDateFormat
telah digantikan oleh kerangka java.time dibangun ke dalam Java 8 dan yang lebih baru. Lihat Tutorial . Hindari kelas lama karena terbukti tidak dirancang, membingungkan, dan merepotkan.
Bagian dari desain yang buruk di kelas lama telah menggigit Anda, di mana toString
metode ini menerapkan zona waktu default JVM saat ini ketika menghasilkan representasi teks dari nilai tanggal-waktu yang sebenarnya dalam UTC (GMT); bermaksud baik tetapi membingungkan.
Kelas java.time menggunakan format ISO 8601 secara default ketika mem-parsing / menghasilkan representasi tekstual dari nilai-nilai tanggal-waktu. Jadi tidak perlu menentukan pola penguraian.
Suatu Instant
saat di timeline di UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Anda dapat menerapkan zona waktu sesuai kebutuhan untuk menghasilkan ZonedDateTime
objek.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );