tl; dr
Instant
.parse(
"2020-03-16T18:50:39.656Z"
)
.atZone(
ZoneId.of( "Asia/Kolkata" )
)
java .time
Вы используете ужасные классы даты и времени, которые были вытеснены годами go современные java .time классы с принятием JSR 310.
ISO 8601
Ваша входная строка в стандартном формате ISO 8601. Z
в конце означает UT C (смещение ноль часов-минут-секунд) и произносится как «зулу».
Классы java .time по умолчанию используют форматы ISO 8601. Поэтому нет необходимости указывать шаблон форматирования.
Instant
Проанализируйте ваш ввод как Instant
, представляющий момент, как видно в UT C.
String input = "2020-03-16T18:50:39.656Z" ;
Instant instant = Instant.parse( input ) ;
ZonedDateTime
Отрегулируйте по индийскому времени.
ZoneId z = ZoneId.of( "Asia/Kolkata" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
О java .time
java .time Фреймворк встроен в Java 8 и более поздние версии. Эти классы заменяют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Учебник Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java .time классы.
Вы можете обмениваться java .time объектами напрямую с вашей базой данных. Используйте драйвер JDB C , совместимый с JDB C 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где взять классы java .time?