ОП ответил на этот вопрос, чтобы изменить часовой пояс по умолчанию для одного экземпляра работающей JVM, установите системное свойство user.timezone
:
java -Duser.timezone=GMT ... <main-class>
Если вам нужно установить определенные часовые пояса при получении объектов Date / Time / Timestamp из базы данных ResultSet
, используйте вторую форму методов getXXX
, которая принимает объект Calendar
:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
Или, установка даты в PreparedStatement:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
Это обеспечит согласованность значений, хранящихся в базе данных, когда столбец базы данных не содержит информацию о часовом поясе.
Классы java.util.Date
и java.sql.Date
хранят фактическое время (миллисекунды) в UTC. Чтобы отформатировать их при выводе в другой часовой пояс, используйте SimpleDateFormat
. Вы также можете связать часовой пояс со значением, используя объект Calendar:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);
Полезная ссылка
https://docs.oracle.com/javase/9/troubleshoot/time-zone-settings-jre.htm#JSTGD377
https://confluence.atlassian.com/kb/setting-the-timezone-for-the-java-environment-841187402.html