Мой сервер MySQL настроен на использование UTC (default-time-zone = «00:00» в my.cnf), и я добавил «serverTimezone = UTC» в URL источника данных.
Как яПонимаете, это означает 2 вещи:
- Сервер MySQL хранит любые данные даты / времени в зоне UTC;
- JDBC знает это.
Предположим, у меня есть некоторый класс Dao с полем LocalDateTime:
class MyDataDao {
public LocalDateTime theDate = LocalDateTime.parse("2020-01-10T10:00:00");
// some other fields ...
}
И затем я хочу вставить MyDataDao в базу данных:
m_jdbc.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(SQL_ADDMYDATA, Statement.RETURN_GENERATED_KEYS);
//... some other fields ...
// the date time field
ps.setObject(3, myData.getTheDate());
return ps;
}
}, genKey);
Теперь, когда возникли вопросы:
Я запросил базу данных в CLI, это было «2020-01-10 09: 00: 00 ».
Я нахожусь в Центральной Европе, поэтому мой «стандартный» часовой поясэто "UTC + 1". Казалось, что JDBC автоматически изменил «theDate» с «UTC + 1» на «UTC».
Однако я знаю, что сейчас летнее время, поэтому практический часовой пояс на самом деле - «UTC». +2" . К сожалению, JDBC не принял это во внимание.
Вопросы:
- Правильно ли все мое понимание выше?
- Как я могу сделатьJDBC учитывает DST?
(я пробовал TimeZone.setRawOffset (...), но это не помогло. Я знаю, что могу вручную сдвинуть поле "theDate" перед отправкойв JDBC, но я думаю, что это определенно не лучшая практика)
Спасибо!