tl; dr
Las otras respuestas están pasadas de moda a partir de 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
Su formato de cadena cumple con la norma ISO 8601 . Este estándar define formatos sensibles para representar varios valores de fecha y hora como texto.
java.time
Las antiguas java.util.Date
/ .Calendar
y las java.text.SimpleDateFormat
clases han sido suplantadas por el marco java.time integrado en Java 8 y versiones posteriores. Ver tutorial . Evite las clases antiguas, ya que han demostrado ser mal diseñadas, confusas y problemáticas.
Parte del diseño deficiente en las clases antiguas lo ha mordido, donde el toString
método aplica la zona horaria predeterminada actual de la JVM al generar una representación de texto del valor de fecha y hora que está realmente en UTC (GMT); bien intencionado pero confuso.
Las clases java.time utilizan formatos ISO 8601 de forma predeterminada al analizar / generar representaciones textuales de valores de fecha y hora. Por lo tanto, no es necesario especificar un patrón de análisis.
Un Instant
es un momento en la línea de tiempo en UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Puede aplicar una zona horaria según sea necesario para producir un ZonedDateTime
objeto.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );