tl; dr
Pozostałe odpowiedzi są przestarzałe od wersji 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 twojego ciągu jest zgodny ze standardem ISO 8601 . Ten standard definiuje rozsądne formaty do przedstawiania różnych wartości daty i czasu jako tekstu.
java.time
Stare klasy java.util.Date
/ .Calendar
i java.text.SimpleDateFormat
zostały zastąpione przez strukturę java.time wbudowaną w Javę 8 i nowszą. Zobacz samouczek . Unikaj starych klas, ponieważ okazały się źle zaprojektowane, zagmatwane i kłopotliwe.
Ugryzła Cię część kiepskiego projektu w starych klasach, gdzie toString
metoda stosuje bieżącą domyślną strefę czasową maszyny JVM podczas generowania tekstowej reprezentacji wartości daty i czasu, która jest w rzeczywistości w czasie UTC (GMT); z dobrymi intencjami, ale mylące.
Klasy java.time używają domyślnie formatów ISO 8601 podczas analizowania / generowania tekstowych reprezentacji wartości daty i godziny. Nie ma więc potrzeby określania wzorca analizy.
Na Instant
osi czasu jest chwila w UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
W razie potrzeby można zastosować strefę czasową do utworzenia ZonedDateTime
obiektu.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );