在mysql中将纪元数转换为人类可读的日期
Posted
技术标签:
【中文标题】在mysql中将纪元数转换为人类可读的日期【英文标题】:Converting epoch number to human readable date in mysql 【发布时间】:2014-07-22 14:12:22 【问题描述】:我有一个纪元编号,例如 1389422614485。 存储此值的值的数据类型是 varchar。 我想将其值转换为人类可读的时间。 我们该怎么做? 这种转换有什么例子吗?
【问题讨论】:
需要注意,unix epoch 时间目前是一个 32 位整数,不能大于 2147483647。将其存储为 INT 也更有意义。 【参考方案1】:您的纪元值1389422614485
似乎具有毫秒精度。所以你需要使用一些mysql数学函数以及from_unixtime()
来生成人类可读的格式。
mysql> select from_unixtime(floor(1389422614485/1000));
+------------------------------------------+
| from_unixtime(floor(1389422614485/1000)) |
+------------------------------------------+
| 2014-01-11 12:13:34 |
+------------------------------------------+
2020 年 7 月更新:从 MySQL 8.0 开始,处理毫秒时不再需要 floor
函数:
mysql> select from_unixtime(1594838230234/1000);
+------------------------------------------+
| from_unixtime(1594838230234/1000) |
+------------------------------------------+
| 2020-07-15 18:37:10.2340 |
+------------------------------------------+
【讨论】:
谢谢哥们,为我工作。一直被这个卡住了【参考方案2】:看看from-unixtime
mysql> SELECT FROM_UNIXTIME(1196440219);
-> '2007-11-30 10:30:19'
【讨论】:
【参考方案3】:你可以使用 from_unixtime() 如下:
SELECT from_unixtime(1388618430);
返回 2014-01-02 00:20:30
【讨论】:
@user3675548: 你用的是什么mysql版本?什么价值? 如果您使用以毫秒(而不是秒)为单位指定的 unix 纪元,此值的 FROM_UNIXTIME() 将返回 NULL。如果是这种情况,请使用您的值除以 1000 的 FLOOR(),如其他答案所示 我收到了2014-01-01 23:20:30
@sttaq 原因可能是您配置了另一个时区。不幸的是,这个函数根据它返回值。
谢谢,是的,后来我意识到mysql会将纪元时间转换为本地时区。【参考方案4】:
这将适用于 +positive
和 -negative
纪元,以防旧出生日期,以及如果您想指定日期格式
select
date_format(DATE_ADD(from_unixtime(0), interval '1389422614485'/1000 second), '%Y-%m-%d %H:%i:%s') as my_new_date;
【讨论】:
以上是关于在mysql中将纪元数转换为人类可读的日期的主要内容,如果未能解决你的问题,请参考以下文章