3

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

4

2 回答 2

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 更改埃及今年的夏令时规则以放弃夏令时。

于 2012-07-06T02:37:20.090 回答
2

与马特的回答相关,使用 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。

于 2012-07-06T03:11:29.463 回答