我正在寻找一种更好的方法来设置 Java 的默认时区。我们当前正在访问 DB2 数据库以获取其当前时区,但它不是时区名称,只是当前的小时/分钟偏移值。因此,我们采用该值并构造一个类似“GMT-07:00”的 ID。
这似乎会导致两个问题:
- 我们必须确保针对 DST 开始/结束进行重置。例如我们已经设置了一个计划任务来查询数据库并设置时区。烦人。
- 由于我们(尚)未知的原因,我们的计划任务有时会设置错误的时区。
假设 DB2 总是返回正确的值,那么我只能想象“GMT-07:00”是模糊的,并且在 Java/它的时区 db/操作系统之间,它从表中提取不同的值。
计算出像“GMT-07:00”这样的字符串后,我们的代码会执行以下操作:
String timezoneGMTOffsetString = "GMT-07:00";
TimeZone localTimeZone = TimeZone.getTimeZone(timezoneGMTOffsetString);
TimeZone.setDefault(localTimeZone);
System.setProperty("user.timezone", timezoneGMTOffsetString);
我们认为我们只需要在外部设置该值并在启动 Tomcat 时使用 -Duser.timezone="America/Los_Angeles"
即可。然后我们就可以取消预定的作业了!
有什么建议吗? Java 6.0_26
最佳答案
首选解决方案始终是转换为 UTC 并从 UTC 转换。使用joda-time用于转换的库。
关于Java TimeZone.setDefault ("GMT-7"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11767344/