Java,如何停用夏令时?

时间:2012-07-06 02:17:43

标签: java web-services date servlets dst

埃及没有更多的夏令时,我正在服务器上制作一个网络应用程序,并尝试将时间更改为埃及时间,但它有效,但在夏令时模式下,我该如何停用它!!

2 个答案:

答案 0 :(得分:5)

您无法在JVM中关闭夏令时。每个时区都使用偏移进行编码,以及是否应用夏令时(如果是,则在哪些日期之间)。

您可以通过以下方式查看:

TimeZone.getDefault().useDaylightTime();
TimeZone.getDefault().inDaylightTime( new Date() );

但是,您可以使用TZUpdater工具更新JDK安装中的时区文件:

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

PS:这是引入埃及变化的时区文件的修订版。此后又进行了10次更新。

版本JRE版本引入了TzUpdaterVersion描述

tzdata2011g 1.4.2_33 5.0u31 6u26 7 1.3.39埃及今年放弃夏令时的夏令时规则变更。

答案 1 :(得分:2)

与Matt的回答相关,使用Java 1.6.0_31:

Date now = new Date();

TimeZone zoneEET = TimeZone.getTimeZone("EET"); // Traditionally used for Egypt
System.out.println(zoneEET.getDSTSavings());  // 1h for DST
System.out.println(zoneEET.getRawOffset());  // GMT+2
System.out.println(zoneEET.inDaylightTime(now)); // true
TimeZone.setDefault(zoneEET));
System.out.println(now);
System.out.println("");

TimeZone zoneEgypt = TimeZone.getTimeZone("Egypt"));
System.out.println(zoneEgypt.getDSTSavings()); // no DST
System.out.println(zoneEgypt.getRawOffset()); // GMT+2
System.out.println(zoneEgypt.inDaylightTime(now)); // false
TimeZone.setDefault(zoneEgypt));
System.out.println(now);

所以从1.6.0_26开始,有一个名为“埃及”的“特殊”区域,没有DST。