We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
爆int
The text was updated successfully, but these errors were encountered:
2038问题(也称为 Y2K38问题)是指在某些使用32位系统(或使用32位time_t类型)存储和计算Unix时间的计算机上,将在2038年1月19日出现时间溢出并导致时间计算错误的问题。
time_t
在一些历史原因或依然使用老旧软件/硬件的系统中,time_t 被定义为 32位有符号整数(即 int32_t ),它能够表示的最大整数是:
int32_t
2^31 - 1 = 2147483647
若把该数字视为“从1970年1月1日以来经过的秒数”,则对应的时间为(UTC):
2147483647 秒 ~ 1970年1月1日 + 2147483647秒 ≡ 2038年1月19日 03:14:07 (UTC)
当系统时间到达或超过这个时间点后,对应存储这个秒数的32位变量会发生整数溢出(overflow)。溢出后时间值将变为负数或其它无效值,导致系统时间可能回到1970年,或产生更不可预料的行为。
值得注意的是,有些系统在还没到2038年时,只要计算或存储的时间点超过2038年1月19日(例如提前预约到2040年的行程),就会遇到时间溢出。
使用64位时间表示
升级操作系统或库
检查和迁移
兼容性测试
两者虽然都属于“时间表示存储不足”引起的系统时间故障,但根本原因和解决方案有所不同。Y2K主要是修改程序使用四位年份或进行字符串处理修正,而2038问题是升级或替换底层的数据类型(time_t)为64位。
2038问题本质上是计算机系统存储和处理时间时,使用了32位有符号整数表示 “自1970年以来的秒数” 而导致的潜在溢出风险。随着操作系统和硬件的进步,多数现代系统已经默认支持或切换到64位时间计数;但一些老旧或嵌入式系统可能依然面临风险,需要尽早升级,以避免在2038年后因时间溢出导致的系统故障或数据异常。
Sorry, something went wrong.
No branches or pull requests
爆int
The text was updated successfully, but these errors were encountered: