加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

如何在Windows(非Java)应用程序中使用Java时区ID?

发布时间:2020-12-14 02:06:40 所属栏目:Windows 来源:网络整理
导读:我需要将时区信息添加到具有用户维护位置的db表中.数据将主要从 Java代码访问,但也有一些PL / SQL和Win32(Delphi)代码需要了解时区信息. 似乎可以直接使用java.util.TimeZone中的id. Java很容易转换(很明显),Hibernate内置了对它的支持,显然Oracle也理解那些
我需要将时区信息添加到具有用户维护位置的db表中.数据将主要从 Java代码访问,但也有一些PL / SQL和Win32(Delphi)代码需要了解时区信息.

似乎可以直接使用java.util.TimeZone中的id. Java很容易转换(很明显),Hibernate内置了对它的支持,显然Oracle也理解那些时区id:

select TZ_OFFSET('Pacific/Marquesas') from dual.

问题是:时区ID似乎与Windows时区数据库不兼容.例如,java.util.timezone id“Pacific / Marquesas”(-09:30)不在Windows的时区选项列表中.注册表根本不包含它;看到

SOFTWAREMicrosoftWindows NTCurrentVersionTime Zones

在这里我只能选择-09:00或-10:00.所以,如果我要像这样存储时区,我怎样才能获得Windows中的实际偏移/ DST信息(没有Java)?希望这不需要映射表,每当它发生变化时我都要及时更新.是否有一个全球认可的标准比java时区ID更好?

更新

时区信息与数据库上的DATE列结合使用.这些列包含本地日期/时间值.如果位置可以与这些值相关联,则位置的时区使我能够在需要时将日期/时间值转换为UTC或任何其他时区.

我意识到,而不是DATE,TIMESTAMP_TZ数据类型或类似的东西更合适.但是,这将需要数据迁移(再次需要TZ),并且遗留应用程序也不支持它们也可以处理数据(除非更改了大量代码).如果我必须将值转换为UTC,问题几乎相同.

底线是我需要在当地时间保持DATE值,但我需要知道其中一些TZ意味着什么.

解决方法

如果不是真正的答案,我可以提供一些背景知识.

许多系统使用Olson时区数据实现.所以这些名称在很多系统中都有用(我认为大多数是Unix,Java,Oracle).微软做了自己的事情.

我在Wikipedia链接的底部看到有一些对Windows世界的映射的引用.

祝好运!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读