Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将日期/时间从UTC转换为会话时区_Sql_Oracle - Fatal编程技术网

Sql 将日期/时间从UTC转换为会话时区

Sql 将日期/时间从UTC转换为会话时区,sql,oracle,Sql,Oracle,我的程序接收UTC时间戳,例如2016年5月31日星期二11:43:47 UTC。如何将它们转换为会话当前时区中的时间戳?使用函数获取的时区偏移量,然后使用函数将字符串转换为具有时区的时间戳,并使用将其更改为使用会话的时区 select from_tz(to_timestamp('Tue, 31 May 2016 11:43:47 UTC' ,'Dy, dd Mon yyyy hh24:mi:ss "UTC"')

我的程序接收UTC时间戳,例如2016年5月31日星期二11:43:47 UTC。如何将它们转换为会话当前时区中的时间戳?

使用函数获取的时区偏移量,然后使用函数将字符串转换为具有时区的时间戳,并使用将其更改为使用会话的时区

select from_tz(to_timestamp('Tue, 31 May 2016 11:43:47 UTC'
                           ,'Dy, dd Mon yyyy hh24:mi:ss "UTC"')
              , 'UTC')
       at time zone tz_offset(sessiontimezone)
      ,sessiontimezone
from   dual;

31/05/2016 19:43:47.000000000 +08:00    Australia/Perth

首先将字符串转换为带有时区的时间戳(使用正确的函数)。要在本地(会话)时区显示结果,请使用“AT local”子句

结果(使用我的前端设置显示带有时区的时间戳-您的可能不同):


为什么这么复杂?此外,在格式模型中硬编码“UTC”是一种糟糕的做法(考虑到您的声誉,我很惊讶)-如果输入来自另一个时区,这将如何工作?反对票是因为这种糟糕的编码实践,而不是复杂的解决方案。你应该使用适当的函数,比如带有时区的时间戳。等等,你自己问了并回答了这个问题吗?真的吗?@mathguy,通过问/回答你自己的问题来记录你在网上发现的东西是一种常见的做法。它让其他人有机会给出其他选项和/或批评(正如你所做的):)硬编码日期/时间格式的字符串对于忽略传入字符串的一部分很有用,当你确信它将始终存在时(如我所做)。文档是(或应该是)对原始帖子的补充,而不是答案。所有这些好处都是一样的。谢谢,我喜欢这个简单得多的解决方案。
select to_timestamp_tz('Tue, 31 May 2016 19:43:47 UTC', 
                                'Dy, dd Mon yyyy hh24:mi:ss tzr') at local from dual;
31-MAY-16 02.43.47.000000000 PM AMERICA/CHICAGO