首页 > 解决方案 > Unix时间戳转换在Mysql和Oracle中是不同的

问题描述

Unix时间戳转换在mysql和oracle中给出不同的结果

select FROM_UNIXTIME(1387444958) from dual;

输出:2013-12-19 10:22:38

select to_char(to_date('01/01/1970 00:00:00','DD/MM/YYYY HH24:MI:SS')+ (1387444958/86400),'YYYY-MM-DD HH24:MI:SS')from dual;

输出:2013-12-19 09:22:38

任何人都可以帮助我从 oracle 获得与我在 MySql 中获得的时间戳相同的时间戳。

标签: mysqloracle

解决方案


Unix 时间戳是1970-01-01 00:00:00 UTC实际1970-01-01 01:00:00在您的本地时区(或 MySQL 服务器所在的时区)中的秒数。看起来FROM_UNIXTIME考虑到了这一点。

对于 Oracle,您可以使用此功能:

FUNCTION UnixTime2Timestamp(UnixTime IN NUMBER) RETURN TIMESTAMP IS
BEGIN
    RETURN (TIMESTAMP '1970-01-01 00:00:00 UTC' + UnixTime * INTERVAL '1' SECOND) AT LOCAL;
END UnixTime2Timestamp;

我假设如果您想在 MySQL 中获取 UTC 时间,那么您必须运行

select 
   CONVERT_TZ(FROM_UNIXTIME(1387444958),'{your local timezone}','UTC') 
from dual;

推荐阅读