ТЛ; др
Другие ответы устарели с 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
Ваш формат строки соответствует ISO 8601 . Этот стандарт определяет разумные форматы для представления различных значений даты и времени в виде текста.
java.time
Старые java.util.Date
/ .Calendar
и java.text.SimpleDateFormat
классы были вытеснены фреймворком java.time, встроенным в Java 8 и более поздние версии. Смотрите учебник . Избегайте старых классов, поскольку они оказались плохо продуманными, запутанными и хлопотными.
Часть плохого дизайна в старых классах укусила вас, когда toString
метод применяет текущий часовой пояс JVM по умолчанию при генерации текстового представления значения даты и времени, которое фактически находится в UTC (GMT); из лучших побуждений, но сбивает с толку.
Классы java.time по умолчанию используют форматы ISO 8601 при разборе / создании текстовых представлений значений даты и времени. Поэтому не нужно указывать шаблон разбора.
Это Instant
момент времени на UTC .
Instant instant = Instant.parse( "2013-09-29T18:46:19Z" );
Вы можете применить часовой пояс по мере необходимости для создания ZonedDateTime
объекта.
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );