首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将date oracle的时间戳转换为ISO-8601 date数据类型

问将date oracle的时间戳转换为ISO-8601 date数据类型
EN

Stack Overflow用户
提问于 2021-09-27 11:57:04
回答 2查看 137关注 0票数 0

我正在寻找Oracle12c中的查询,以便将欧洲时区的18-12-2003 13:15:00转换为2003-12-18T13:15:00+01:00作为日期时间数据类型。

这是可能的吗?还是我错过了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-09-27 12:42:28

欧洲有几个时区,你必须更具体一点。

代码语言:javascript
复制
FROM_TZ(TO_TIMESTAMP('18-12-2003 13:15:00', 'DD-MM-YYYY HH24:MI:SS'), 'Europe/...')

代码语言:javascript
复制
TO_CHAR(
   FROM_TZ(TO_TIMESTAMP('18-12-2003 13:15:00', 'DD-MM-YYYY HH24:MI:SS'), 'Europe/...'),
   'YYYY-MM-DD"T"HH24:MI:SSTZH:TZM'
)
票数 0
EN

Stack Overflow用户

发布于 2021-09-27 12:48:42

如果要将列中的所有日期转换为该时区CET的格式,并且确定偏移量始终为1,则可以执行以下操作:

代码语言:javascript
复制
SELECT TO_CHAR(FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '1:00'),'YYYY"-"MM"-"DD"T"HH24":"MI":"SSTZR') 
   FROM DUAL;

然而,问题是如何利用夏令时。当DST生效时,偏移量是否会发生变化?这里有很多考虑因素--这个question (归功于@Wernfried )有一个很好的概述。

例如,如果您的数据采用UTC时区,并且希望以CET显示,则可以按如下方式进行转换:

注意夏季有2小时的偏移量,冬季有1小时的偏移量。

代码语言:javascript
复制
WITH dates (season,dt) AS
(
  SELECT 'summer', TO_DATE('01-AUG-2021','DD-MON-YYYY') FROM DUAL UNION ALL
  SELECT 'winter', TO_DATE('01-JAN-2021','DD-MON-YYYY') FROM DUAL
)
SELECT dt,
       season,
       TO_CHAR(
         FROM_TZ( CAST( dt AS TIMESTAMP ), 'UTC' )
           AT TIME ZONE 'CET',
         'YYYY-MM-DD HH24:MI:SS TZH:TZM TZR'
       ) AS cet_timezone
FROM   dates;

01-AUG-2021 summer  2021-08-01 02:00:00 +02:00 CET
01-JAN-2021 winter  2021-01-01 01:00:00 +01:00 CET
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69346172

复制
相关文章

相似问题

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