土耳其最近决定(2016年9月6日)永久停留在夏令时(DST)。此行为取消了之前计划于2016年10月30日04:00:00结束的夏令时。时钟没有改变。
土耳其介于+2和+3之间,所以现在它将保持在+3。在这里你可以看到
https://www.timeanddate.com/time/change/turkey/ankara?year=2016
*以上信息来自此链接,其中哪个问题与我的相似。 (Java timezone in turkey (rejected daylight saving))
直到今天,制造商已经提供了一些解决方案。例如,Windows为土耳其配置了时区 - (UTC + 03:00)伊斯坦布尔。但是,关于同一主题的一些问题仍然像我一样。
我开发使用jdk1.8.0_101的Java Web应用程序。我让它在Apache Tomcat 7.0上运行。在这个应用程序中,有时我使用日期对象但是,当我获得日期对象(新的Date())时,我发现JVM的默认时区与应用程序运行的OS(Windows但不同版本)的时区不同。
我在三种不同的环境中测试它。我在每个环境中使用相同的java代码和相同的jdk版本。 Java代码是;
TimeZone zone = TimeZone.getDefault();
System.out.println(zone.getDisplayName());
System.out.println(zone.getID());
TEST CASE-1) 我的笔记本电脑 - Windows 10 Pro(管理员用户) - 新的Date()对象返回 Wed Dec 21 10:00:38 EET 2016 测试代码结果:
Eastern European Time
Asia/Istanbul
==================================
TEST CASE-2) 我的Dektop PC - Windows 7 Service Pack 1(公司网络上受限制的用户) - 新的Date对象返回 Wed Dec 21 10:00: 38 EET 2016 测试代码结果:
Eastern European Time
Asia/Istanbul
==================================
TEST CASE-3) 虚拟服务器 - Windows Server 2008 R2 Enterprise(管理员用户) - 新的Date对象返回 Wed Dec 21 11:03:11 GMT + 03: 00 2016 测试代码结果:
GMT+03:00
GMT+03:00
==================================
****在第三个测试用例中,虚拟服务器返回正确的日期信息,但在其他情况下,它们会返回错误的日期。我知道我可以在获取日期对象时设置时区。但是,项目很大,这意味着我需要纠正很多日期对象。此外,第3个测试用例向我们展示了通过配置系统日期/时间可以解决问题。我能做些什么呢?我等你的推荐。
答案 0 :(得分:3)
最新变化相关"土耳其从EET / EEST(+ 02 / + 03)转为永久+ 03"尚未集成到您正在使用的JDK8更新101中,实际上它不是最新的JDK 8更新112的一部分。您需要手动升级tzupgrader工具以获取JDK中的更改。 这是" tzdata2016g"将#34;土耳其从EET / EEST(+ 02 / + 03)切换为永久+ 03"集成,您可以在此处找到更多详细信息 - http://www.oracle.com/technetwork/java/javase/tzdata-versions-138805.html 你需要手动安装你可以从这里获得的tzupdator工具 - http://www.oracle.com/technetwork/java/javase/tzupdater-readme-136440.html 我希望能解决你的问题。