【问题标题】:Converting epoch number to human readable date in mysql在mysql中将纪元数转换为人类可读的日期
【发布时间】:2014-07-22 14:12:22
【问题描述】:

我有一个纪元编号,例如 1389422614485。 存储此值的值的数据类型是 varchar。 我想将其值转换为人类可读的时间。 我们该怎么做? 这种转换有什么例子吗?

【问题讨论】:

  • 需要注意,unix epoch 时间目前是一个 32 位整数,不能大于 2147483647。将其存储为 INT 也更有意义。

标签: mysql epoch


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2021-02-19
      • 1970-01-01
      • 2012-11-12
      • 2021-11-11
      • 2019-03-26
      • 2021-10-09
      • 2014-03-24
      • 2021-06-28
      相关资源
      最近更新 更多