如果我使用转换器进行unixtime,我会得到
2005年5月31日星期二16:23:17 GMT 1117556597.如果我运行以下查询,我收到错误 literal与字符串格式不匹配。那是为什么?
select to_date('1117556597','yyyy-mm-dd HH:MI:SS') from dual
答案 0 :(得分:1)
TO_DATE
方法尝试将输入与提供的模式匹配。例如:
TO_DATE('2003/07/09', 'yyyy/mm/dd')
TO_DATE('070903', 'MMDDYY')
TO_DATE('20020315', 'yyyymmdd')
您可以查看http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions183.htm
我想这会对你有帮助(没有经过考验)
SELECT TO_CHAR(TO_DATE('01-JAN-1970','DD-MON-YYYY HH24:MI:SS') +
( 1117556597/ (1000*60 * 60 * 24) ),'DD-MON-YYYY HH24:MI:SS') "DATE" FROM DUAL ;
答案 1 :(得分:1)
19700101是1970年1月1日。这是" epoch"对于UNIX系统。 UNIX系统通过计算自" epoch"以来的秒数来跟踪时间。
你需要convert
这样,
SQL> SELECT TO_DATE('19700101','yyyymmdd') + (1117556597/24/60/60) thedate
2 FROM dual
3 /
THEDATE
---------
31-MAY-05
让我们看一下完整的datetime
,
SQL> SELECT to_char(TO_DATE('19700101','yyyymmdd') + (1117556597/24/60/60),'DD-MON-YYYY HH24:MI:SS') thedate
2 FROM dual
3 /
THEDATE
--------------------
31-MAY-2005 16:23:17
SQL>
编辑关于TIMEZONE
最好明确提及时区。
您可以在文字本身中提及时区,或将其投放为UTC
并将其转换为local timezone
。
SELECT TO_CHAR ( FROM_TZ ( CAST (DATE '1970-01-01 + (1117556597/24/60/60) AS TIMESTAMP), 'UTC') AT TIME ZONE 'your local timezone', 'MM/DD/YYYY HH24:MI:SS') FROM dual;
注意请检查语法,我在进行此修改时无法访问数据库。