【问题标题】:Does Oracle manage timezone correctly for all regions?Oracle 是否为所有区域正确管理时区?
【发布时间】:2012-09-17 08:00:23
【问题描述】:
我有以下问题。它返回不同地区的当前时间。它适用于表 V@timezone_names 中的大多数区域。但是这个查询返回了错误的结果:
- “亚洲/德黑兰”,时差为 +4:30
- 'America/Caracas' 时区差异为 -4:30
我的查询是:
select CAST(FROM_TZ( CAST(current_date AS TIMESTAMP)
, sessiontimezone)
AT TIME ZONE 'America/Caracas' AS DATE)
from dual;
您可以看到不同国家-城市here的当前时间。
【问题讨论】:
标签:
oracle
oracle10g
timezone
timestamp-with-timezone
【解决方案1】:
Oracle 会不时发布时区文件补丁,以纠正错误以及因国家和地区更改其时区规则而引入的更改。 Oracle 支持说明 412160.1 显示了如何检查您拥有的时区文件以及如何更新。 (检查在 10g 中很简单 - SELECT version FROM v$timezone_file)。
在 11g 时区文件版本为 14 时,加拉加斯得到 -4:30,德黑兰得到 +4:30,显示的时间与您链接到的站点相匹配。
看起来像加拉加斯 changed its timezone 在 2007 年末,所以我猜你显示的是 -4:00;德黑兰在 2008 年有 DST 变化(或reintroduced DST,不确定),所以我猜你显示的是 +3:30。假设您当前的时区早于这些更改似乎是合理的;默认情况下,10g 将在 v3 或 v4 上。
我建议您更新到最新的时区文件(版本 18);您需要查看该支持说明以了解如何根据您的情况执行此操作,或者更具体地说,请参阅说明 1448706.1,“为 Oracle 数据库应用 DSTv18 更新”。您可以将其作为补丁 13417321 获取。如果您在使用最新补丁时仍然发现问题,则可以向 Oracle 提出服务请求以修复它。