【问题标题】:how to get EST and UTC irrespective of Day如何获得 EST 和 UTC 而与日期无关
【发布时间】:2014-12-18 04:09:06
【问题描述】:

我必须使用 Oracle 10g 显示 EST/EDT 和 GMT/UTC。问题是在 11 月 2 日 UTC 差异将更改“+ 05”小时,这将导致我的工作失败。请让我知道如何在没有的情况下解决它手动将间隔更改为 5 小时。我尝试过 new_time 功能,但这并不能解决问题。所有列都是 DATE 数据类型。

SELECT PROCESS_NAME, 
     date_modified as EST_DATE_MODIFIED,
     date_modified + interval '+ 04' hour as GMT_DATE_MODIFIED
FROM tbl_process_status ;

结果

EST_DATE_MODIFIED    GMT_DATE_MODIFIED
22-OCT-14 11:08:25  22-OCT-14 03:08:25

感谢 Ed,但上面的查询没有返回正确的 UTC 时间。

EST - 22-OCT-14 12:19:55
Correct UTC- 22-OCT-14 04:19:55
Above Query UTC 22-OCT-14 08:19:55 

 select (TO_NUMBER(TO_CHAR(CURRENT_TIMESTAMP, 'TZH')) * INTERVAL '1' HOUR) from dual;
 -0 4:0:0.0

感谢 Multisync。 我得到了以下结果,但我只需要 DD-MON-YY HH:MM:SS 格式的数据。

Expected 22-OCT-14 12:19:55    
Expected 22-OCT-14 04:19:55    
Result   22-OCT-14 12.19.55.000000000 PM AMERICA/NEW_YORK      
Result   22-OCT-14 04.19.55.000000000 PM UTC

【问题讨论】:

  • 您的date_modifiedDATE 还是TIMESTAMP WITH TIME ZONE
  • Date_modified 是日期数据类型。

标签: sql oracle date dst


【解决方案1】:
select systimestamp at time zone 'est' for_timestamp,
       cast(sysdate as timestamp) at time zone 'est' for_date, 
       cast(sysdate as timestamp) at time zone 'gmt' gmt_timezone 
  from dual;

所以你可以试试这个(根据cmets编辑)

SELECT PROCESS_NAME, 
     cast(cast(date_modified as timestamp) at time zone 'America/New_York' as date) as EST_DATE_MODIFIED,
     cast(cast(date_modified as timestamp) at time zone 'UTC' as date) as GMT_DATE_MODIFIED
FROM tbl_process_status;

【讨论】:

  • 为了支持夏令时(如前所述),您应该使用'America/New_York' 而不是'est'。此外,使用'UTC' 而不是'gmt' 更正确。
  • 感谢 Multisync。我得到了以下结果,但我只需要 DD-MON-YY HH:MM:SS 格式的数据。预计 22-OCT-14 12:19:55 预计 22-OCT-14 04:19:55 结果 22-OCT-14 12.19.55.000000000 PM AMERICA/NEW_YORK 结果 22-OCT-14 04.19.55.000000000 PM UTC
猜你喜欢
  • 2021-09-28
  • 2014-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
  • 2012-04-19
  • 2021-04-13
  • 2021-05-14
相关资源
最近更新 更多