在我的代码中,当我将一个日期保存为东部时区的今天日期时,它会在我们查看时正确显示。但在太平洋时区,它显示的是上一个日期,即昨天的日期。我们将日期存储在Oracle中作为日期字段。
在太平洋时间内完成核心日期所需的任何特殊编码?
答案 0 :(得分:0)
日期没有时区 - 所以当您存储来自不同时区的日期时,您需要确保将它们转换为同一时区。
CREATE TABLE table_name( id INT, value DATE );
INSERT INTO table_name VALUES( 1, TIMESTAMP '2016-07-07 23:00:00 PST' AT TIME ZONE 'UTC' );
INSERT INTO table_name VALUES( 1, TIMESTAMP '2016-07-07 23:00:00 EST' AT TIME ZONE 'UTC' );
然后:
SELECT id,
value AS utc,
CAST(
FROM_TZ( CAST( value AS TIMESTAMP ), 'UTC' ) AT TIME ZONE 'EST'
AS DATE
) AS EST,
CAST(
FROM_TZ( CAST( value AS TIMESTAMP ), 'UTC' ) AT TIME ZONE 'PST'
AS DATE
) AS PST
FROM table_name t;
输出:
ID UTC EST PST
-- ------------------- ------------------- -------------------
1 2016-07-08 06:00:00 2016-07-08 01:00:00 2016-07-07 23:00:00
2 2016-07-08 04:00:00 2016-07-07 23:00:00 2016-07-07 21:00:00