oracle转换unix epoch时间到目前为止

Sub*_*ike 5 unix oracle datetime date-format epoch

上下文是我们的产品中存在一个现有的应用程序,它生成EPOCH号并将其发送到现有的oracle过程,反之亦然.它使用这样的程序在该过程中工作

SELECT UTC_TO_DATE (1463533832) FROM DUAL
SELECT date_to_utc(creation_date) FROM mytable
Run Code Online (Sandbox Code Playgroud)

当我尝试这些查询时,它对我和Oracle 10g服务器(以及oracle sql developer 4.x,如果这很重要)也有效.

在现有过程中,要求是将值保存为日期本身(时间组件无关紧要),但是在新要求中,我必须将unix EPOCH值转换为datetime(在小时/分钟/秒级别,或者在特定时间更好) oracle查询中的格式如dd-MMM-yyyy hh:mm:ss).奇怪的是,我无法找到有关Google的UTC_TO_DATE和DATE_TO_UTC函数的任何文档.我已经在stackoverflow上查看了所有不同的问题,但是大多数都是特定于编程语言,如php,java等.

底线,如何在Oracle查询中使用这些函数(或任何其他函数)将EPOCH转换为该时间级别?另外,我所指的那些功能可能是定制的或特定的,因为我没有看到任何文档或对此的引用.

tbo*_*one 14

从纪元转换为毫秒(假设纪元是1970年1月1日):

select to_date('19700101', 'YYYYMMDD') + ( 1 / 24 / 60 / 60 / 1000) * 1322629200000
from dual;
Run Code Online (Sandbox Code Playgroud)

11/30/2011 5:00:00 AM

要将该日期转换回毫秒:

select (to_date('11/30/2011 05:00:00', 'MM/DD/YYYY HH24:MI:SS') - to_date('19700101', 'YYYYMMDD')) * 24 * 60 * 60 * 1000
from dual;
Run Code Online (Sandbox Code Playgroud)

1322629200000

如果是秒而不是毫秒,则省略等式的1000部分:

select to_date('19700101', 'YYYYMMDD') + ( 1 / 24 / 60 / 60 ) * 1322629200
from dual;

select (to_date('11/30/2011 05:00:00', 'MM/DD/YYYY HH24:MI:SS') - to_date('19700101', 'YYYYMMDD')) * 24 * 60 * 60
from dual;
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.

  • 请注意,仅当您的本地时区也是UTC时,才会给出正确的结果. (2认同)

kpa*_*r87 6

另一种选择是使用间隔类型:

SELECT TO_TIMESTAMP('1970-01-01 00:00:00.0'
                   ,'YYYY-MM-DD HH24:MI:SS.FF'
       ) + NUMTODSINTERVAL(1493963084212/1000, 'SECOND')
FROM dual;
Run Code Online (Sandbox Code Playgroud)

它具有不会减少毫秒的优势。