El PO respondió a esta pregunta para cambiar la zona horaria predeterminada para una sola instancia de una JVM en ejecución, establezca la propiedad user.timezone
sistema:
java -Duser.timezone=GMT ... <main-class>
Si necesita establecer zonas horarias específicas al recuperar objetos de fecha/hora/marca de tiempo desde una base de datos ResultSet
, use la segunda forma de los métodos getXXX
que toma un objeto Calendar
:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
ResultSet rs = ...;
while (rs.next()) {
Date dateValue = rs.getDate("DateColumn", tzCal);
// Other fields and calculations
}
O, ajuste de la fecha en un PreparedStatement:
Calendar tzCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
PreparedStatement ps = conn.createPreparedStatement("update ...");
ps.setDate("DateColumn", dateValue, tzCal);
// Other assignments
ps.executeUpdate();
Estos se asegurará de que el valor almacenado en la base de datos es consistente cuando la columna de la base de datos no guarda información de zona horaria.
Las clases java.util.Date
y java.sql.Date
almacenan el tiempo real (milisegundos) en UTC. Para formatear estos en la salida a otra zona horaria, use SimpleDateFormat
. También puede asociar una zona horaria con el valor de uso de un objeto Calendar:
TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);
En realidad, su problema es un subconjunto mío, pero encontré una solución. – SyBer
Mire la pregunta duplicada y busque "Joda" y "DateTimeZone". –