OP回答了这个问题,以更改正在运行的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 assignmentsps.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



