Мне кажется, что TestBean
объявлен для хранения java.util.Date
, но экземпляр TestBean
, возвращенный из findById()
, вместо этого содержит java.sql.Timestamp
. Это очень неудачно (если это правда).
Timestamp
реализовано как подкласс Date
. Оба класса плохо разработаны и давно устарели, мы не должны больше их использовать. Несмотря на отношения подкласса, согласно документации, мы не должны рассматривать Timestamp
как разновидность Date
. Реализация Timestamp
как подкласса Date
- это настоящий взлом. И помещать Timestamp
в Date
поле вашего объекта неправильно. Я также не думаю, что когда-либо намеревалось использовать Timestamp
в наших модельных компонентах. Он предназначался для передачи данных в SQL столбцы базы данных с типом данных timestamp
и timestamp with time zone
.
. Поэтому хорошее решение: измените класс TestBean
на современный объект даты и времени. принадлежащий к классу java .time, современному Java API даты и времени. Редактировать: Поскольку тип данных в MySQL равен datetime
, наилучшее совпадение в Java равно LocalDateTime
. LocalDateTime
- это дата и время дня без часового пояса или смещения UT C.
Если вы не можете изменить тип, объявленный в классе TestBean
, есть еще несколько возможных улучшений:
- Убедитесь, что объект содержит объект
Date
, как он объявлен, а не Timestamp
. - Добавьте метод получения и установки, которые возвращают и принимают
Instant
вместо Date
, чтобы ваш класс мог лучше взаимодействовать с кодом, используя java .time. Новые методы сделали бы необходимое преобразование. Затем используйте новый установщик для установки значения в toReturn
.
Если вы не можете сделать ничего из этого, и вы вынуждены быть частью хака, есть, конечно, способы установить modifiedDate
на старомодный Timestamp
. Я предлагаю:
toReturn.setModifiedDate(Timestamp.from(Instant.parse("2020-01-01T17:10:10Z")));
Я дал время как 17:10:10. Это время в UT C (обозначается Z
). Я предположил, что MST, упомянутый в вашем вопросе, является североамериканским горным стандартным временем (а не малайзийским стандартным временем?), И если да, то это время соответствует желаемому 10:10:10 в вашем часовом поясе.
Ссылки