tl; dr
Die anderen Antworten sind ab Java 8 veraltet.
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
Ihr Zeichenfolgenformat entspricht zufällig der Norm ISO 8601 . Diese Norm definiert sinnvolle Formate für die Darstellung verschiedener Datums- und Uhrzeitwerte als Text.
java.time
Die alten Klassen java.util.Date
/ .Calendar
und java.text.SimpleDateFormat
wurden durch das in Java 8 und höher integrierte Java.time-Framework ersetzt. Siehe Tutorial . Vermeiden Sie die alten Klassen, da sie sich als schlecht gestaltet, verwirrend und problematisch erwiesen haben.
Ein Teil des schlechten Designs in den alten Klassen hat Sie gebissen, wo die toString
Methode die aktuelle Standardzeitzone der JVM anwendet, wenn eine Textdarstellung des Datums- / Uhrzeitwerts generiert wird, der tatsächlich in UTC (GMT) ist. gut gemeint, aber verwirrend.
Die java.time-Klassen verwenden standardmäßig ISO 8601-Formate, wenn Textdarstellungen von Datums- und Uhrzeitwerten analysiert / generiert werden. Sie müssen also kein Analysemuster angeben.
Ein Instant
ist ein Moment auf der Timeline in UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Sie können nach Bedarf eine Zeitzone anwenden , um ein ZonedDateTime
Objekt zu erstellen .
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );