首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL:将UTC转换为CST

Oracle SQL:将UTC转换为CST
EN

Stack Overflow用户
提问于 2014-10-30 01:15:37
回答 3查看 13.5K关注 0票数 0

我想将UTC日期/时间转换为本地CST。

下面的函数可以工作,但是当应该只有5小时(直到2014年11/2日夏令时)时,它会给出6小时的差异。

代码语言:javascript
复制
CAST((FROM_TZ(CAST(utc_date AS TIMESTAMP),'UTC') AT TIME ZONE 'CST') AS DATE) cst_date

我也尝试了一个变种

代码语言:javascript
复制
to_date(to_char((from_tz(to_timestamp(to_char(utc_date, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS') ,'UTC')
at time zone 'CST'),'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as cst_date,
EN

回答 3

Stack Overflow用户

发布于 2014-10-30 02:14:59

使用"US/Central“作为目标时区似乎会产生正确的结果。

代码语言:javascript
复制
select from_tz(CAST ('15-oct-2014' AS TIMESTAMP),'GMT') at  TIME ZONE 'US/Central' with_daylight_savings,
       from_tz(CAST ('15-nov-2014' AS TIMESTAMP),'GMT') at  TIME ZONE 'US/Central' without_daylight_savings
from dual;


WITH_DAYLIGHT_SAVINGS                       WITHOUT_DAYLIGHT_SAVINGS
--------------------------------------------------------------------------------------
14-OCT-14 07.00.00.000000000 PM US/CENTRAL  14-NOV-14 06.00.00.000000000 PM US/CENTRAL
票数 1
EN

Stack Overflow用户

发布于 2014-10-30 01:23:33

使用时区区域而不是时区缩写of ('CST')。您可以在此处找到所需的时区:

代码语言:javascript
复制
SELECT * from v$timezone_names where tzabbrev = 'CST';

也许你需要'CST6CDT‘而不是'CST’

票数 0
EN

Stack Overflow用户

发布于 2014-10-30 23:57:18

也许这是一种愚蠢的方法,但是您从这个查询中得到了什么呢?

代码语言:javascript
复制
SELECT 
   TO_CHAR((TIMESTAMP '2014-01-01 00:00:00' + LEVEL * INTERVAL '1' DAY) AT TIME ZONE 'America/Chicago', 'yyyy-mm-dd hh24:mi TZH:TZM') AS dst,
   TO_CHAR((FROM_TZ(CAST(DATE '2014-01-01' AS TIMESTAMP), 'UTC') + LEVEL * INTERVAL '1' DAY) AT TIME ZONE 'America/Chicago', 'yyyy-mm-dd hh24:mi TZH:TZM') AS dst
FROM dual
CONNECT BY LEVEL <= 365;

是不是和预期的一样?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26636736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档