SQL: 如何使用 UNIX_TIMESTAMP() 将未来日期转换为时间戳?
SQL: How to convert future date to timestamp with UNIX_TIMESTAMP()?
我想将 DATETIME 从列转换为 UNIX TIMESTAMP。但问题是这些日期是遥远的未来,例如 2066-09-01...您可以尝试那些简单的查询:
SELECT UNIX_TIMESTAMP( '2016-09-03 09:00:00' )
returns 1472886000 -> 好
SELECT UNIX_TIMESTAMP( '2036-09-03 09:00:00' )
returns 2104038000 -> 好
SELECT UNIX_TIMESTAMP( '2066-09-03 09:00:00' )
returns 0 -> 不好!为什么??
有什么想法吗?任何解决方法?
What happens on January 19, 2038?
On this date the Unix Time Stamp will cease to work due to a 32-bit overflow. Before this moment millions of applications will need to either adopt a new convention for time stamps or be migrated to 64-bit systems which will buy the time stamp a "bit" more time.
听起来您的 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 日期格式配合使用。
我想将 DATETIME 从列转换为 UNIX TIMESTAMP。但问题是这些日期是遥远的未来,例如 2066-09-01...您可以尝试那些简单的查询:
SELECT UNIX_TIMESTAMP( '2016-09-03 09:00:00' )
returns 1472886000 -> 好
SELECT UNIX_TIMESTAMP( '2036-09-03 09:00:00' )
returns 2104038000 -> 好
SELECT UNIX_TIMESTAMP( '2066-09-03 09:00:00' )
returns 0 -> 不好!为什么??
有什么想法吗?任何解决方法?
What happens on January 19, 2038?
On this date the Unix Time Stamp will cease to work due to a 32-bit overflow. Before this moment millions of applications will need to either adopt a new convention for time stamps or be migrated to 64-bit systems which will buy the time stamp a "bit" more time.
听起来您的 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 日期格式配合使用。