在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中将纪元数转换为人类可读的日期的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 sed 将纪元转换为人类可读的日期时间

在 Mac OSX 上将 unix 纪元时间转换为人类可读的日期 - BSD

如何将纳秒的纪元时间转换为人类可读的?

如何在 Teradata 中将纪元时间转换为人类可读

将人类可读的日期转换为纪元时间戳

使用 Java 将 unix 纪元转换为人类可读时的日期不正确