L'OP a répondu à cette question de changer le fuseau horaire par défaut pour une instance unique d'une machine virtuelle Java en cours d'exécution, définissez la propriété du système user.timezone
:
java -Duser.timezone=GMT ... <main-class>
Si vous devez définir des fuseaux horaires spécifiques lors de la récupération des objets Date/Heure/Horodatage à partir d'une base de données ResultSet
, utilisez la seconde forme des méthodes getXXX
qui prend un objet Calendar
:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
Ou, fixer 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. Les classes java.util.Date
et java.sql.Date
stockent le temps réel (en millisecondes) en UTC. Pour les formater en sortie vers un autre fuseau horaire, utilisez SimpleDateFormat
. Vous pouvez également associer un fuseau horaire à la valeur à l'aide d'un objet Calendrier:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);
En fait, son problème est un sous-ensemble du mien, mais j'ai trouvé une solution. – SyBer
Examinez la question en double et recherchez "Joda" et "DateTimeZone". –