Daniel L. VanDenBosch Asked: 2019-03-26 13:25:35 +0800 CST2019-03-26 13:25:35 +0800 CST 2019-03-26 13:25:35 +0800 CST Postgres 会处理 Unix Epoch 问题吗? 772 我想知道 Postgres 是否会处理 2038 年出现的 unix 纪元问题?我读过这个并且想知道。 这显然是关于生产力的事情,因为它太远了,但我很好奇。 postgresql dbms 2 个回答 Voted Best Answer Patrick Mevzek 2019-03-26T15:24:33+08:002019-03-26T15:24:33+08:00 如果您查看文档中的https://www.postgresql.org/docs/11/functions-datetime.html,它会显示有关从纪元值to_timestamp返回值的函数的数据。timestamp with time zone完整的描述是:“Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to timestamp” 函数的输入类型是double precision. 从https://www.postgresql.org/docs/11/datatype-numeric.html您可以看到它double precision被定义为8 bytes具有 15 位十进制数字的精度。下面一点你可以阅读: 双精度类型的范围通常在 1E-307 到 1E+308 之间,精度至少为 15 位。 所以1E+308几秒钟后1970-01-01应该带你到 2038 年之后很远...... 事实上,如果您查看https://wiki.postgresql.org/wiki/TodoDone84,其中列出了 PostgreSQL 8.4 中已完成的所有功能,您可以看到: 已完成的项目:扩展时区代码以允许 64 位值,这样我们就可以表示 2038 年之后的年份 Acuna 2020-04-06T15:02:47+08:002020-04-06T15:02:47+08:00 不用担心,因为他们已经在十多年前(!)在 8.4 版本(2009)中添加了超越 2038 年的支持: https://www.postgresql.org/docs/8.4/release-8-4.html
如果您查看文档中的https://www.postgresql.org/docs/11/functions-datetime.html,它会显示有关从纪元值
to_timestamp
返回值的函数的数据。timestamp with time zone
完整的描述是:“Convert Unix epoch (seconds since 1970-01-01 00:00:00+00) to timestamp”函数的输入类型是
double precision
.从https://www.postgresql.org/docs/11/datatype-numeric.html您可以看到它
double precision
被定义为8 bytes
具有 15 位十进制数字的精度。下面一点你可以阅读:所以
1E+308
几秒钟后1970-01-01
应该带你到 2038 年之后很远......事实上,如果您查看https://wiki.postgresql.org/wiki/TodoDone84,其中列出了 PostgreSQL 8.4 中已完成的所有功能,您可以看到:
不用担心,因为他们已经在十多年前(!)在 8.4 版本(2009)中添加了超越 2038 年的支持:
https://www.postgresql.org/docs/8.4/release-8-4.html