Ваш пример ввода не соответствует значению, указанному в вашем сообщении об ошибке:
"2020-03-19T21:19:32:921Z"
- ваш заданный ввод. "2020-04-16T08:12:16.016+05:30[Asia/Calcutta]"
сообщается в вашем сообщении об ошибке.
Вы слишком усердно работаете.
Оба значения в вашем примере соответствуют стандарту ISO 8601 . Классы java .time по умолчанию используют эти стандартные форматы при разборе / генерации текста. Поэтому нет необходимости указывать шаблон форматирования.
Instant Instant = Instant.parse( "2020-03-19T21:19:32:921Z" ) ;
ZonedDateTime zdt = ZonedDateTime.parse( "2020-04-16T08:12:16.016+05:30[Asia/Calcutta]" ) ;
Похоже, вы смешиваете устаревшие классы даты и времени, включенные в самые ранние версии Java вместе с Joda-Time . Вместо этого вы должны использовать java .time классы, которые официально вытеснили как унаследованные классы, так и Joda-Time .
Вместо передачи java.util.Date
в PreparedStatement::setDate
, передача java .time объектов в setObject
.
JDB C 4.2 требуется поддержка OffsetDateTime
но, как ни странно, не более часто используемые Instant
или ZonedDateTime
. Так что конвертируй.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
OffsetDateTime odt = zdt.toOffsetDateTime() ;
myPreparedStatement.setObject( … , odt ) ;
Вы сказали:
Я пытаюсь вставить DateTimeFormatter в метку времени
DateTimeFormatter
для создания текста, который представляет значение в объекте даты и времени. Этот класс не имеет никакого отношения к обмену информацией с базой данных.
Класс java.sql.Timestamp
является одним из тех устаревших классов даты и времени, которые вы больше не должны использовать. Заменено на OffsetDateTime
(и, необязательно, Instant
).
О 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.*
классах. Поддержка Hibernate 5 и JPA 2.2 java .time .
Где взять java .time классы?