UNIX将UNIX时间戳转换为带时区的时间戳

时间:2015-07-17 19:49:50

标签: oracle timestamp unix-timestamp timestamp-with-timezone

尝试使用时区将UNIX时间戳转换为Oracle时间戳。 期望看到不同的输出,但是datetime部分是相同的。

什么是拧?

select (timestamp '1970-01-01 00:00:00' + numtodsinterval(1204104116656/1000,'second')) at time zone tz_offset('EST') from dual;

产出:27-FEB-08 09.21.56 .656000000 AM -05:00

select (timestamp '1970-01-01 00:00:00' + numtodsinterval(1204104116656/1000,'second')) at time zone tz_offset('PST') from dual;

产出:27-FEB-08 09.21.56 .656000000 AM -07:00

为什么日期/时间部分是一样的? Oracle不进行调整吗?

1 个答案:

答案 0 :(得分:7)

Unix时间戳来自1970-01-01 00:00:00 UTC。当您执行timestamp '1970-01-01 00:00:00' Oracle获取当地时区时!

你必须这样做:

(TIMESTAMP '1970-01-01 00:00:00' AT TIME ZONE 'UTC' +     
    numtodsinterval(1204104116656/1000,'second')) AT time zone tz_offset('PST');

`