【发布时间】:2022-01-05 08:55:10
【问题描述】:
摘自cppref:
std::time_t是 32 位有符号整数的实现(很多 历史实现)在 2038 年失败。
但是,文档没有说明如何检测当前的实现是否是 2038 安全的。所以,我的问题是:
如果 sizeof(std::time_t) == sizeof(std::uint64_t) 在 C++ 中,它是否保证 2038 年安全?
【问题讨论】:
-
(from : en.cppreference.com/w/cpp/chrono/c/time_t) 虽然没有定义,但它几乎总是一个整数值,保存自 1970 年 1 月 1 日 00:00 UTC 以来的秒数(不计算闰秒),对应于 POSIX 时间。 这不是我想要构建我的软件的定义,而是更喜欢使用 std::chrono。我认为您真正的问题是:我们可以通过编译为 64 位来避免重构我们的代码吗?我的建议是为您的时间处理内容编写单元测试,并专门针对跨越 2038 年问题点的日期和时间段对其进行测试。
-
你想跨平台兼容吗?如果不是,则阅读相关平台的文档。
标签: c++ time standards year2038 y2k