我不太精通时区的工作。所以,如果这是一个相当反问的问题,请原谅我。
我有这样的疑问:
SELECT CAST(TO_DATE('05182021221504','MMDDYYYYHH24MISS') AS TIMESTAMP)
AT TIME ZONE 'UTC'
FROM dual;为什么我的结果是5/19? 5/19/2021 3:15:04.000000 AM +00:00
时间明确为晚上10:15:04 (22:15:04),日期为5/18。为什么这会将它滚动到5/19天/时间?
发布于 2021-06-03 03:04:59
你的意思是“转换”(不是“对话”)吗?
无论如何,似乎您输入了一个表示不带时区的日期-时间的字符串,并且您希望转换为带有时区的时间戳,假设时区为UTC。到目前为止对吗?
如果是这样,那么您使用的函数是错误的。您需要from_tz,例如
select from_tz(to_timestamp('05182021221504','MMDDYYYYHH24MISS'), 'UTC')
from dual;现在,如果您想了解您的尝试发生了什么:at time zone从一个时区转换到另一个时区。您的输入没有时区,它只是一个抽象的时间戳。Oracle不会抛出错误,而是使用默认值-会话的时区。因此,它将日期和时间从CDT转换为UTC,从而产生不同的日期和时间。如果您查看时差,请记住UTC没有“夏令时”,而CDT有。(在回答评论时,你说你的时区是CST;我强烈怀疑,这很可能是CDT,意思是-受夏令时的影响。)
https://stackoverflow.com/questions/67810535
复制相似问题