当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Windows(非Java)应用程序中使用Java时区ID?》经验,为你挑选了1个好方法。

我需要将时区信息添加到具有用户维护位置的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的时区选项列表中.注册表根本不包含它; 看到

\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones

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

更新

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

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

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



1> John M..:

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

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

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

祝好运!

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有