将oracle.sql.timestamptz转换为带时区的postgresql时间戳

时间:2014-08-11 10:06:59

标签: java sql oracle postgresql timestamp-with-timezone

抱歉,但我是菜鸟,我需要你的建议。 我有一些来自oracle with timestamptz的结果集,我得到这个timestamptz的字符串值,如

  

2014-1-10 13.47.56.0 7:0

然后我需要把它放在postgresql-request中的某个函数中,它带有时区的时间戳。如何将此字符串转换为java中的时区时间戳?我尝试过做一些事情 TO_TIMESTAMP_TZ("2014-1-10 13.47.32.0 7:0","YYYY-MM-DD HH24:MI:SS.FF TZH:TZM")但它对我没有用。请帮帮我。

1 个答案:

答案 0 :(得分:1)

我不知道Postgres中的函数TO_TIMESTAMP_TZ()。你可能意思是to_timestamp()

我也不知道模板模式TZH:TZM。您可以使用 AT TIME ZONE 构造。

数据引用单引号;双引号用于标识符。

这对我有用:

SELECT to_timestamp('2014-1-10 13.47.32.0', 'YYYY-MM-DD HH24:MI:SS.MS')::timestamp
       AT TIME ZONE '-7:0';  -- shift back

在Oracle中输出带有TZR(时区区域)的ISO 8601格式的时间戳会更加明智,这一点不那么模糊。 Details in the Oracle manual.

或者更好的是,UTC时间戳(没有0偏移量),您可以直接在Postgres中转换为timestamptz

SELECT '2014-01-10 06:47:32+0'::timestamptz;

或UNIX时期,可以提供给to_timestamp()的第二种形式。

SELECT to_timestamp(1389336452);

Postgres中有关时间戳的详细信息: