java - 是否有一个 Java 库可以将 Olsen 时区 id 转换为 Windows 时区 id

标签 java timezone

我有一个旧版 Windows 应用程序,它从数据库读取数据。其中一列是“TimeZoneInfoId”。在传统世界中,它是由另一个 Windows 应用程序编写的,因此它存储 Windows 字符串: TimeZoneInfo.CurrentTimeZone.StandardName

我现在需要从 Java 应用程序写入该表。所以我试图找到一个能够映射 tz database 中的时区 ID 的库。 (以前称为 Olson 数据库)到 Windows 时区 ID。理想情况下,我想使用一个库,理论上我可以在将来更新到更高版本,因为我读到时区信息有时会发生变化。

我已经在网上进行了一些搜索,我找到的答案通常是编写您自己的映射/查找或使用 NodaTime 并在 .NET 中进行转换(如果您确实需要一个可以更新的库)。

我无法更新遗留代码(无需完全重写),因此只需在这里提出问题,因为我找到的大多数答案都有点旧,所以也许有一些我可以利用的新东西;)

如果不是,它必须是一个自定义查找函数 hfea。

最佳答案

好吧,假设您的意思是该值来自 TimeZoneInfo.Local.Id,那么您可以进行此转换。如果它来自 TimeZone.CurrentTimeZone.StandardName,那么将会有一些条目失败,因为 StandardName 是本地化字符串,而英文形式不一定与 Id 匹配

回答你的问题,你可以看看 source XML data in CLDR ,并以类似于 how I described here 的方式解析它.

或者,如果您确实想要一个库,请考虑 ICU4J有方法getWindowsIdgetIDForWindowsID使用相同的数据进行转换。然而,ICU 可能非常大,所以如果您只需要它来做一件事,那么您最好直接使用 XML。

关于java - 是否有一个 Java 库可以将 Olsen 时区 id 转换为 Windows 时区 id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36604854/

相关文章:

java - 测验代码中空白答案的异常处理,java

java - org.hibernate.exception.SQLGrammarException : could not execute query

javascript - 如何删除 getTimezoneOffset

渥太华的 Java 时区?

java - 如何在长时间运行的操作开始之前/同时显示进度屏幕?

java - 将人类可读日期转换为 Java 日期对象

java - java.io.IOException : "The filename, directory name, or volume label syntax is incorrect" 的可能原因是什么

Python - 以秒为单位获取UTC偏移量

mysql - 由于时区,apt-get 升级在 mariadb-server 上总是失败

ruby-on-rails - 如何从 Rails 的下拉列表中获取选定的时区