У меня есть LocalDate
, который я пытаюсь преобразовать в java.sql.Date
, чтобы сохранить его в поле Date в БД. Моя проблема заключается в том, что когда я конвертирую его в java.sql.Date
, он на один день отстает из-за того, что машина работает на EST. Я устанавливаю Joda.DateTime
в UTC и создаю java.sql.Date
с помощью конструктора millis. Я включаю вывод отладочных часов, чтобы вы могли видеть, что представляют собой разные значения:
item.getDate().toDateTimeAtStartOfDay() = {[email protected]}"2013-09-25T00:00:00.000Z"
item.getDate().toDateTimeAtStartOfDay().getMillis() = 1380067200000
new java.sql.Date(item.getDate().toDateTimeAtStartOfDay().getMillis()) = {[email protected]}"2013-09-24"
item.getDate().getLocalMillis() = 1380067200000
new java.sql.Date(item.getDate().getLocalMillis()) = {[email protected]}"2013-09-24"
new java.util.Date(item.getDate().getLocalMillis()) = {[email protected]}"Tue Sep 24 20:00:00 EDT 2013"
Из создания java.util.Date
я предполагаю, что это потому, что моя машина, на которой я тестирую, находится в EST, а LocalDate - в UTC, но я не уверен, какой правильный способ исправить это. Я понимаю, что могу получить локальный часовой пояс и добавить это к миллисам, но это похоже на хакерское исправление. Есть ли способ сделать это, что я просто отсутствую?
Обновление с помощью миллиса для java.util.Date
new java.util.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000
item.getDate().toDateTimeAtStartOfDay().getMillis() = 1380153600000
item.getDate() = {[email protected]}"2013-09-26"
new java.sql.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000
new java.util.Date(item.getDate().getLocalMillis()) = {[email protected]}"Wed Sep 25 20:00:00 EDT 2013"
new java.util.Date(item.getDate().getLocalMillis()).getTime() = 1380153600000