我需要添加时区信息到用户维护位置的数据库表。数据将主要从Java代码访问,但也有一些需要了解时区信息的PL/SQL和Win32(Delphi)代码。如何在Windows(非Java)应用程序中使用Java时区ID?
使用java.util.TimeZone中的id似乎很简单。 Java可以很容易地转换是(明显),休眠内置了对它的支持,显然也是甲骨文理解这些时区的ID:
select TZ_OFFSET('Pacific/Marquesas') from dual.
的问题是:时区IDS似乎并没有与Windows时区兼容D B。例如,java.util.timezone id“Pacific/Marquesas”(-09:30)不在Windows的时区选择列表中。注册局根本没有包含它;见
\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones
在这里,我只能选择-09:00或-10:00。因此,如果我要像这样存储时区,我如何能够在Windows(无Java)中实现偏移量/ DST信息?希望这不需要映射表,我必须随时更新映射表。是否有一个全球公认的标准比java时区标识更好?
更新
的时区信息是与数据库DATE列组合使用。这些列包含本地日期/时间值。如果某个位置可以与这些值相关联,则该位置的时区使我可以在需要时将日期/时间值转换为UTC或任何其他时区。
我意识到,而不是DATE TIMESTAMP_TZ数据类型或类似的东西会更合适。但是,这需要进行数据迁移(对于TZ,需要再次进行迁移),并且传统应用程序也不支持这些应用程序(除非大量代码发生更改)。如果我必须将值转换为UTC,问题几乎相同。
底线是我需要在当地时间保持DATE值,但我需要知道其中一些TZ的含义。
也许你需要有一个不同的语言/语言环境的Windows像Marquesas是一个有效的选择?毫无疑问,微软不会像这样在这个时区之间传递人们的信息...... – 2009-02-24 19:21:52
它似乎并没有像这样工作。我会说Windows总是拥有注册表中的所有时区(至少支持它)。语言/语言环境无法充分确定时区 - 特别是在今天的移动计算中。 – 2009-02-25 10:25:24