MiniQuark дал несколько хороших ответов для баз данных в целом, но есть некоторые специфические особенности MySql для рассмотрения ...
Настройка базы данных для использования часового пояса UTC
Этого на самом деле будет недостаточно для решения проблемы. Если вы передадите java.util.Date в MySql в соответствии с запросом OP, драйвер MySql изменит значение , чтобы оно выглядело как то же местное время в часовом поясе базы данных.
Пример: ваша база данных, если она настроена на UTC. Ваше приложение EST. Вы передаете объект java.util.Date на 5:00 (EST). База данных преобразует его в 5:00 UTC и сохраняет его. Потрясающе.
Вам нужно отрегулировать время, прежде чем передать данные, чтобы "отменить" эту автоматическую настройку. Что-то вроде ...
long originalTime = originalDate.getTime();
Date newDate = new Date(originalTime - TimeZone.getDefault().getOffset(originalTime));
ps.setDate(1, newDate);
Чтение данных обратно требует аналогичного преобразования.
long dbTime = rs.getTimestamp(1).getTime();
Date originalDate = new Date(dbTime + TimeZone.getDefault().getOffset(dbTime));
Вот еще одна забавная причуда ...
В Java при чтении из базы данных всегда используйте: Timestamp myDate
= resultSet.getTimestamp ("my_date", Calendar.getInstance (TimeZone.getTimeZone ("UTC")));
MySql фактически игнорирует этот параметр Calendar. Это возвращает одно и то же значение независимо от того, какой календарь вы передаете его.