【问题标题】:SQL: How to convert future date to timestamp with UNIX_TIMESTAMP()?SQL:如何使用 UNIX_TIMESTAMP() 将未来日期转换为时间戳?
【发布时间】:2017-01-10 06:24:55
【问题描述】:

我想将 DATETIME 从列转换为 UNIX TIMESTAMP。但问题是这些日期都在遥远的未来,比如 2066-09-01... 你可以试试这些简单的查询:

SELECT UNIX_TIMESTAMP( '2016-09-03 09:00:00' ) 返回 1472886000 -> 好

SELECT UNIX_TIMESTAMP( '2036-09-03 09:00:00' ) 返回 2104038000 -> 好

SELECT UNIX_TIMESTAMP( '2066-09-03 09:00:00' ) 返回 0 -> 糟糕!为什么??

有什么想法吗?任何解决方法?

【问题讨论】:

  • 您使用的是哪个 DBMS?

标签: sql datetime timestamp future unix-timestamp


【解决方案1】:

来自Unixtimestamp.com

2038 年 1 月 19 日会发生什么?

在此日期,由于 32 位溢出,Unix 时间戳将停止工作。在此之前,数以百万计的应用程序要么需要采用新的时间戳约定,要么迁移到 64 位系统,这将为时间戳增加“一点”时间。

【讨论】:

    【解决方案2】:

    听起来您的 rdbms 遇到了 Y2038 问题:https://en.m.wikipedia.org/wiki/Year_2038_problem

    这是 MySQL 吗?他们对此有一个错误:https://dev.mysql.com/worklog/task/?id=1872

    如果可能,建议在 SQL 之外处理此问题。 PHP 的 strtotime() 和其他语言中的类似函数可以很好地与 MySQL 的 ISO 日期格式配合使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-12
      • 2012-04-04
      • 2014-05-16
      • 2014-12-03
      • 2017-04-06
      相关资源
      最近更新 更多