Les OP ont répondu à cette question de changer le fuseau horaire par défaut pour une seule instance de l'exécution de la JVM, définissez l' user.timezone
système de la propriété:
java -Duser.timezone=GMT ... <main-class>
Si vous avez besoin de configurer des zones de temps lors de la récupération de la Date/Heure/Timestamp objets à partir d'une base de données ResultSet
, utiliser la deuxième forme de l' getXXX
des méthodes qui prennent un Calendar
objet:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
Ou, réglage de la date dans un PreparedStatement:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
Ces veillera à ce que la valeur stockée dans la base de données est cohérente lorsque la colonne de base de données ne conserve pas les informations de fuseau horaire.
L' java.util.Date
et java.sql.Date
classes d'entreposer des temps (en millisecondes) de l'UTC. Pour le format de ces sur la sortie d'un autre fuseau horaire, utilisez SimpleDateFormat
. Vous pouvez également associer un fuseau horaire avec la valeur à l'aide d'un Calendrier de l'objet:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);