日历TimeZone inDaylightTime返回以色列的错误答案

时间:2013-08-20 09:49:49

标签: java google-app-engine timezone dst

以色列最近更改了有关DST的laws,因此在使用Calendar.getTimeZone().inDaylightTime(date)方法时,将代码部署到应用引擎时,9月6日 - 10月27日的日期响应不正确。有趣的是,当在本地开发服务器上运行时,导致错误响应的日期范围是不同的。

  1. 这是否有短期解决方法?
  2. 要求Google解决此问题的流程是什么?

1 个答案:

答案 0 :(得分:2)

您描述的更改已在IANA TZDB版本2013d中捕获。您可以在GitHub here的提交历史记录中看到它。

由于您展示的代码看起来像Java,我假设您使用的是the Java Runtime Environment on Google App Engine

Java定期更新其TZDB数据并通过JRE更新将其推出。他们确实提供带外TZUpdater实用程序。您可以阅读有关此here的更多信息。

根据this changelog,TZDB 2013d更新包含在TZUpdater 1.3.57中,但尚未合并到JRE更新版本中。您可以为当地环境here下载此内容。

Google必须将此TZUpdater应用于其生产环境。我已经搜索过,但是我找不到任何关于他们是否已经定期这样做的信息。您可以提出问题here来提问。

关于变通方法 - 您可以使用Joda Time库,它具有自己的TZDB副本,因此不依赖于JRE或TZUpdater更新。 Joda Time版本2.3已经包含了2013d数据,但是如果你想要,你可以自己更新,these instructions。当然,使用Joda Time意味着对您可能拥有的任何现有代码进行重大更改,但这可能是值得的。