将Java时区强制为GMT / UTC

无论机器上设置的时区如何,我都需要强制任何时间相关的操作到GMT / UTC。 任何方便的方式,以便在代码中?

为了澄清,我使用数据库服务器时间进行所有操作,但它根据当地时区格式化。

谢谢!


OP回答了此问题以更改运行JVM的单个实例的默认时区,请设置user.timezone系统属性:

java -Duser.timezone=GMT ... <main-class>

如果您需要在从数据库ResultSet检索Date / Time / Timestamp对象时设置特定时区,请使用采用Calendar对象的getXXX方法的第二种形式:

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 assignments
ps.executeUpdate();

这些将确保当数据库列不保留时区信息时,存储在数据库中的值保持一致。

java.util.Datejava.sql.Date类存储UTC中的实际时间(毫秒)。 要将这些输出格式化为其他时区,请使用SimpleDateFormat 。 您还可以使用日历对象将时区与值相关联:

TimeZone tz = TimeZone.getTimeZone("<local-time-zone>");
//...
Date dateValue = rs.getDate("DateColumn");
Calendar calValue = Calendar.getInstance(tz);
calValue.setTime(dateValue);

另外如果你可以这样设置JVM时区

System.setProperty("user.timezone", "EST");

或JVM参数中的-Duser.timezone=GMT


我必须为Windows 2003 Server设置JVM时区,因为它始终为新的Date()返回GMT;

-Duser.timezone=America/Los_Angeles

或者你适当的时区。 找到一个时区列表证明是有点具有挑战性......

这里有两个列表;

http://wrapper.tanukisoftware.com/doc/english/prop-timezone.html

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/index.jsp?topic=%2Frzatz%2F51%2Fadmin%2Freftz.htm

链接地址: http://www.djcxy.com/p/29329.html

上一篇: Force Java timezone as GMT/UTC

下一篇: What is the difference between ManualResetEvent and AutoResetEvent in .NET?