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/ .Calendardan java.text.SimpleDateFormattelah 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 toStringmetode 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 Instantsaat di timeline di UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Anda dapat menerapkan zona waktu sesuai kebutuhan untuk menghasilkan ZonedDateTimeobjek.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );
