tl; dr
As outras respostas estão obsoletas no 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
Por acaso, seu formato de string está em conformidade com o padrão ISO 8601 . Esse padrão define formatos sensíveis para representar vários valores de data e hora como texto.
java.time
As classes old java.util.Date
/ .Calendar
and java.text.SimpleDateFormat
foram substituídas pela estrutura java.time incorporada no Java 8 e posterior. Veja o tutorial . Evite as classes antigas, pois elas provaram ser mal projetadas, confusas e problemáticas.
Parte do design inadequado das classes antigas o mordeu, onde o toString
método aplica o fuso horário atual da JVM ao gerar uma representação de texto do valor de data e hora que está realmente no UTC (GMT); bem-intencionado, mas confuso.
As classes java.time usam os formatos ISO 8601 por padrão ao analisar / gerar representações textuais de valores de data e hora. Portanto, não há necessidade de especificar um padrão de análise.
An Instant
é um momento na linha do tempo no UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Você pode aplicar um fuso horário conforme necessário para produzir um ZonedDateTime
objeto.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );