1

我有以下查询。它返回不同地区的当前时间。它适用于表 V@timezone_names 中的大多数区域。但是这个查询返回了错误的结果:

  1. '亚洲/德黑兰',时区差异 +4:30
  2. 'America/Caracas' 有 -4:30 时区差异

我的查询是:

select CAST(FROM_TZ( CAST(current_date AS TIMESTAMP)
                   , sessiontimezone)
             AT TIME ZONE 'America/Caracas' AS DATE) 
  from dual;

您可以在此处查看不同国家/城市的当前时间。

4

1 回答 1

6

Oracle 会不时发布时区文件补丁,以纠正错误以及由国家和地区引入的更改其时区规则的更改。Oracle 支持说明 412160.1 显示了如何检查您拥有的时区文件以及如何更新。(检查在 10g 中很简单 - SELECT version FROM v$timezone_file)。

在 11g 和时区文件版本 14 下,我得到加拉加斯 -4:30 和德黑兰 +4:30,显示与您链接到的站点匹配的时间。

看起来加拉加斯在 2007 年底改变了时区,所以我猜你显示的是 -4:00;德黑兰在 2008 年进行了 DST 更改(或重新引入 DST,不确定),所以我猜你显示的是 +3:30。假设您当前的时区早于这些更改似乎是合理的;默认情况下,10g 将在 v3 或 v4 上。

我建议您更新到最新的时区文件(版本 18);您需要查看该支持说明以了解如何根据您的情况执行此操作,或者更具体地说,请参阅说明 1448706.1,“为 Oracle 数据库应用 DSTv18 更新”。您可以将其作为补丁 13417321 获取。如果您在使用最新补丁时仍然发现问题,那么您可以向 Oracle 提出服务请求以修复它。

于 2012-09-17T10:41:41.713 回答