PO odpowiedział na to pytanie, aby zmienić domyślną strefę czasową dla pojedynczej instancji uruchomionego JVM, należy ustawić właściwość systemu user.timezone
:
java -Duser.timezone=GMT ... <main-class>
Jeśli trzeba ustawić określone strefy czasowe podczas pobierania obiektów Date/Time/Timestamp z bazy danych ResultSet
, użyj drugiej metody getXXX
, która wymaga obiektu Calendar
:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
Albo, wyznaczając datę w PreparedStatement:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
To zapewni, że wartość przechowywana w bazie danych jest spójna, gdy kolumna w bazie nie przechowuje strefy czasowej.
Klasy java.util.Date
i java.sql.Date
przechowują rzeczywisty czas (milisekundy) w UTC. Aby sformatować je na wyjściu do innej strefy czasowej, użyj SimpleDateFormat
. Można także powiązać z wartością czasową za pomocą obiektu Kalendarz:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);
W rzeczywistości jego problem jest moim podzbiorem, ale znalazłem rozwiązanie. – SyBer
Sprawdź powielone pytanie i wyszukaj "Joda" i "DateTimeZone". –