тл; д-р
Інші відповіді застаріли, як у 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 );