将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.Date
和java.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?