将 windows 个时区映射到 Oracle 时区

Map windows time zones to Oracle time zones

我有一个使用 GetTimeZoneInformation 读取 PC 时区信息的应用程序。然后,当我建立与 Oracle 的连接时,我需要 'alter session set time_zone = <time_zone>'。如果我只使用偏移量,oracle 将忽略夏令时设置,因此我需要指定时区名称。然而,oracle 在 v$timezone_names table 中有超过 2000 条记录,其中 none 通过 tzutil 或 GetTimeZoneInformation 匹配时区 Windows returns。有什么办法可以将时区 windows returns 转换为 oracle 中的相应时区,考虑到我需要保留夏令时设置。

实际上那是不可能的。 Oracle 使用 IANA Time zone 数据库。尝试 tzutil /l 获取具有替代名称的所有时区列表。

或者看看How to translate between Windows and IANA time zones?

注意,除了 ALTER SESSION SET TIME_ZONE = ...,您还可以通过环境变量 ORA_SDTZ 或在注册表中

预设 Oracle 会话时区
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_<Oracle Home>\ORA_SDTZ
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Oracle\KEY_<Oracle Home>_32bit\ORA_SDTZ