首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java夏令时有关问题

2012-12-25 
Java夏令时问题?操作系统不使用UTC时间的情况下,操作系统会使用系统记录的夏令时跳变时间点自动进行夏令时

Java夏令时问题

?

操作系统不使用UTC时间的情况下,操作系统会使用系统记录的夏令时跳变时间点自动进行夏令时切换。

suse11系统在cd /usr/share/zoneinfo中有所有时区信息。可以用zdump -v 时区ID 查看时区信息,里面会有详细的夏令时切入切出点记录。

如:

Europe/Budapest? Sun Mar 25 00:59:59 2012 UTC = Sun Mar 25 01:59:59 2012 CET isdst=0
Europe/Budapest? Sun Mar 25 01:00:00 2012 UTC = Sun Mar 25 03:00:00 2012 CEST isdst=1
Europe/Budapest? Sun Oct 28 00:59:59 2012 UTC = Sun Oct 28 02:59:59 2012 CEST isdst=1
Europe/Budapest? Sun Oct 28 01:00:00 2012 UTC = Sun Oct 28 02:00:00 2012 CET isdst=0
?

Java夏令时有关问题

Java也有自己的时区配置信息,记录在%jre_home%/lib/zi中,其中包含夏令时配置。

?

?

Java通过TimeZone.getDefault()发现或System.getProperty("user.timezone")获取当前时区。

如果java能获取到操作系统时区配置,并且jre中此时区的夏令时配置也和操作系统配置一致,则java程序能正确解析夏令时,如果java的夏令时规则和操作系统的不一样,则会辨识错误。

?

比如操作系统设置为2012-10-6 GMT+3时区 Asia/Baghdad,

此时在xp操作系统上,这个时间点是可以勾选夏令时的,但是我们使用的jre中认为巴格达时区没有夏令时,

这时候解析的时间就会出错,系统显示的时间是标准时间,会比操作系统时间前一个小时(夏令时比正常时间快1小时)。

(通过世界时钟查询,今年巴干达确实没有夏令时http://24timezones.com/zh_shi/baghdad_shi_zhong.php)

?

?

而GMT +1时区 Europe/Budapest ,操作系统记录的切入时间与切出时间与jre记录一样,这样夏令时切换不会有问题。

?

?

如果Jre时区与实际时区不一致需要下载jre更新工具

http://www.oracle.com/technetwork/java/javase/downloads/tzupdater-download-513681.html

或者使用java自动更新。

?

?

热点排行