tet*_*tet 24 64-bit time 14.04
我正在使用 64 位 Ubuntu 系统。
我目前正在研究一个包含 MariaDB 的项目。我计划在项目中引入时间戳技术,以便人们将收到不同时区的正确时间。
我听说并阅读了一些关于 2038 年时间戳问题的文章。许多文章建议我们使用 64 位系统来多买“位”的时间。
这个“位”指的是多少时间?到最后我们能够管理 Web 应用程序的时间是否足够长?如果情况并非如此,是否就像只延长两年一样,那么当 2040 年到来时,我们是否会有无法正常工作的应用程序?
Oli*_*Oli 34
好吧,如果可以选择从字面上购买“位”,即从有符号的 32 位整数转换为无符号的 32 位整数,那么事情会一直工作到 2106。
转移到 64 位是“好一点”。您将获得数千亿年的分辨率。
Ubuntu 是这样做的:
$ uname -p
x86_64
$ date --date=9090-01-01 +%s
224685532800
Run Code Online (Sandbox Code Playgroud)
但是,这是操作系统级别。仅仅因为 Ubuntu 使用 64 位整数作为其时间并不意味着 MySQL/MariaDB 将使用它来存储其时间戳。如果 2038 年以后的日期对您现在很重要,请立即开始测试。
实际上,我可以为您节省一些时间。它还是坏了。这个错误是十多年前报告的,但它的主要测试仍然以 64 位整数失败。
mysql> select from_unixtime(2548990800);
+---------------------------+
| from_unixtime(2548990800) |
+---------------------------+
| NULL |
+---------------------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
这甚至不是存储。有点可怜。
(是的,它是在 MariaDB 10.1 版上运行的)
根本不要将它存储为整数。将其存储为ISO 8601格式的日期字符串。这是 Internet 上使用的标准格式。
9999-12-31T23:59:59+00:00
Run Code Online (Sandbox Code Playgroud)