1

我们收到来自外部提供商的文件。其中一列包含格式为“05/01/2014 09:25:41 AM EDT”的时间戳。我正在尝试使用以下 SQL 将其插入到 TIMESTAMP WITH TIME ZONE 列中:

INSERT INTO table VALUES (to_timestamp_tz('05/01/2014 09:25:41 AM EDT', 'MM/DD/YYYY HH12:MI:SS AM TZR TZD'));

那是我得到的时候ORA-1882: timezone region not found。我也试过这样指定

INSERT INTO table VALUES (to_timestamp_tz('05/01/2014 09:25:41 AM EST EDT', 'MM/DD/YYYY HH12:MI:SS AM TZR TZD'));

但后来我明白了ORA-1857: not a valid time zone

有人知道我如何插入这个吗?我们正在运行 Oracle 11.2.0.3。我可以看到,v$timezone_names对于 tzname 'America/New York',EST 和 EDT 似乎都是有效的 tzabbrev。

编辑:

看来,如果我用 EST5EDT 代替 EDT(以及 CST6CDT、MST7MDT 和 PST8PDT 分别代替 CST、MST 和 PST),我可以获得我需要的行为。这样做的问题是我需要提前知道这些替换是什么,以便我可以围绕它们进行编码。我仍然需要知道如何处理其他时区的潜在夏令时问题。

4

2 回答 2

0

INSERT INTO TAB VALUES (to_timestamp_tz('05/01/2014 08:25:41 AM ,America/New_York', 'MM/DD/YYYY HH12:MI:SS.FF AM TZR:TZD'));

于 2014-06-23T13:04:42.300 回答
0

短名称是不可能的,因为它们是模棱两可的。ECT例如,可用于“欧洲中部时间”、“厄瓜多尔时间”或“东加勒比时间”。因此,您必须使用长名称,例如America/New_YorkUTC+/-hh:mi 表示法。

于 2014-06-23T19:46:34.380 回答