mysql - Unix时间戳转换在Mysql和Oracle中是不同的

标签 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 中获得相同的时间戳。

最佳答案

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;

关于mysql - Unix时间戳转换在Mysql和Oracle中是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55719557/

相关文章:

php - php 中的 XML 解析不起作用?

sql - oracle sql从行到列

sql - Oracle数据库: Like with multiple values

c# - 无法在 C# 中解析 Oracle 时间戳

php - OSCommerce tep_db_input 与 tep_db_prepare_input

php - unserialize() 函数不适用于新服务器上 MySQL 表中的变量

mysql - 这些 MySQL 全局变量的真正含义是什么?

sql - Oracle SQL 限制结果然后显示剩余的

java - XA 事务结束、垃圾收集和直到 tx-complete =true

c# - 从 ID 的 C# 列表中删除 mysql 服务器中的行