mysql - 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 中获得的时间戳相同的时间戳。
解决方案
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;
推荐阅读
- git - 我如何过滤多个标签上的 git log
- android - Android Retrofit Api 响应在参数正文中传递查询令牌时给出 null
- c++ - 如何为 qsort 制作比较器以便它可以比较私有成员?
- jsf - 如果对象的引用发生更改,Ajax 渲染将不起作用
- r - 如何隔离R中的指定变量?
- java - 将表单数据请求发送到 Spring Boot 应用程序时 LocalDate 属性上的转换错误
- r - 从向量中提取连续非零值的计数
- xml - 如何优化 XML 阅读器?
- python - 我可以在这个 MNIST 训练、测试数据中找到特定数字数据的数量吗?
- javascript - 使用 Vue.js 2 在 HTML 中打印图标 + 变量 + 字符串