Однако, когда гибернация фактически сохраняется в базе данных, дата преобразуется в местное время и сохраняется) ex.значение было установлено в установщике сущностей как "2009-09-09 00:08:08" - GMT фактическое значение, сохраненное в базе данных, "2009-09-08 08:08:08" - восточное время США.
Хорошо, во-первых, какой бы тип столбца вы не использовали для хранения своей даты в MySQL (TIMESTAMP или DATETIME), также не сохраняет часовой пояс .С Re: Сохранение часового пояса с указанием даты и времени :
TIMESTAMP - секунды с 1970 года, занимающие 4 байта.Хранится в GMT.То есть смещение TZ применяется при сохранении значения, а затем применяется при его получении.(...)
DATETIME - это 8-байтовая строка цифр "ггггммдччммсс".(...)
И, во-вторых, если только не ошибочное поведение , я понимаю, что преобразование должно быть выполнено либо сервером, либодрайвер JDBC в зависимости от настроек часового пояса сервера , чтобы вы не получали противоречивые данные.
В обоих случаях я хочу сохранить "2009-09-09 00:08:08 "- GMT или " 2009-09-08 08:08:08 "- восточное время США с Явы должны уступитьтакое же значение в базе данных.
Однако, похоже, что другое преобразование выполняется, когда отображает их.Возникает вопрос: как вы на самом деле проверяли значение «сохраняемой даты».«Проблема» возникает в вашем клиенте SQL?В коде Java?
Ссылки
В документации MySQL для DateTime говорится, что «MySQL извлекает и отображает значения DATETIME в формате« ГГГГ-ММ-ДД ЧЧ: ММ: СС »».Это означает, что mysql преобразует «миллисекунды с эпохи» в вышеуказанный формат.Итак, теперь мой вопрос: информация о часовом поясе также хранится в mysql?
Я обновил свой первоначальный ответ (который не был полностью точным / исчерпывающим).Независимо от того, используете ли вы DATETIME или TIMESTAMP, ответ - нет.
Еще одно замечание, которое я сделал, заключается в том, что вышеупомянутая проблема «конверсии» даты существует, только когда я устанавливаю дату в приложении Java.Если я создаю триггер mysql для обновления / установки даты, используя «UTC_TIMESTAMP ()», дата отображается во времени «UTC».
Функция UTC_TIMESTAMP () всегда возвращает текущие UTC дату и время.
Я хотел бы знать следующее:
- Как вы "выявили" проблему?С клиентом SQL или из Java?
- Каков местный часовой пояс JVM?
- Что такое часовой пояс MySQL Server?
- Какая версияДрайвер JDBC для MySQL?
- Не могли бы вы выполнить тест с необработанным JDBC?