这是一个异想天开的问题,部分受到2012年电影宣传的启发,但它可能对软件系统产生真正的影响.(如果不是在2012年,那么肯定是在2038年.)
2012年有各种各样的世界末日预测,我想知道是否有一个日期时间/时间戳系统将于2012年到期?(我以为我在一年前跑过,但我不记得具体细节.我也记得2038年.)
例如,常用的日期时间系统从1970/1/1开始,并从该时间开始计数秒.如果将unsigned int的最大值作为秒添加到该值,则会得到一个落在2038年的日期.确切地说是1/19/2038 3:14:07 AM.
那么,是否有一个日期时间系统:
epoch start + max of common int type = date in 2012?
顺便说一句,我不是想煽动任何偏执狂.这与实际系统设计考虑因素完全一致.
更新甜甜圈发现此页面包含以下参考但没有进一步的信息:2012-07-13星期五 - UNIX time_t $ 50000000于11:01:20 UTC
有任何想法吗?
我已经编译了内核 3.19.1 但仍然有问题time_t
。只是一个简单的程序,cout << sizeof (time_t);
给出的大小为 4 个字节,而不是我的意图的 8 个字节。
我应该在 make menuconfig 期间打开特定选项吗?
我一直在阅读Y2038问题,我明白time_t
最终将恢复到最低可表示的负数,因为它会尝试"递增"符号位.
根据该Wikipedia页面,time_t
无法更改为无符号整数,因为它会破坏处理早期日期的程序.(这是有道理的.)
但是,我不明白为什么它首先没有成为无符号整数.为什么不将1970年1月1日存储为零而不是一些荒谬的负数?
目前我正在将我所有的PHP unix时间戳转换为2k38以上的问题.
我注意到setcookie() expire date参数使用unix时间戳.有没有办法用替代方法设置过期日期,也许以某种方式使用DateTime类?
从有关过期日期的PHP文档:
注意:您可能会注意到expire参数采用Unix时间戳,而不是日期格式Wdy,DD-Mon-YYYY HH:MM:SS GMT,这是因为PHP在内部执行此转换.
2038 年问题(也称为 Y2038 或 Unix Y2K)涉及将许多数字系统中的时间表示为自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的秒数,并将其存储为有符号的 32 位整数。此类实现无法对 2038 年 1 月 19 日 03:14:07 UTC 之后的时间进行编码。就像 Y2K 问题一样,2038 年问题是由所选数据类型的容量不足引起的。
我试图搜索这如何影响 Android 及其应用程序。但我没有找到任何明确的答案。所以我想在这里问:
如果我们的程序将使用 System.currentTimeMillis() 方法,我们是否可以预期未来(2038 年及以后)会出现任何问题?
它们是我们应该避免的任何危险方法吗?
我正在编写一些代码,由于Java 溢出,因此Year_2038_problem会在2038年1月19日之后停止工作,Date
所以我可以创建一个junit测试,该测试在2036年开始失败,给我2年的时间来修复它。
首先要创建一个失败的测试,我又增加了25年的时间,并且对测试没有失败感到惊讶。
@Test
public void warn2038Overflow() {
Calendar c = Calendar.getInstance();
c.add(Calendar.YEAR, 25);
// today is 2019 plus 25 years becomes 2044 which should overflow
assertEquals("No calendar overflow", true,
c.getTimeInMillis() > 0l);
}
Run Code Online (Sandbox Code Playgroud)
有什么线索为什么这不会失败?
我正在将Android-Studio-3.4.1与java-1.8.0_152(64位)结合使用,并具有'junit:junit:4.12'和'androidx.test:runner:1.1.0'
我已经多次见过,例如在UNIX上,在MySQL时间戳等中:Epoch从1970-1-1开始,但最大可记录年份是2038年.现在让我算一下:
2^32/60/60/24/365+1970
2106
Run Code Online (Sandbox Code Playgroud)
因此,如果我们使用完整的32位,我们自然会得到2106年没有任何问题.但显然,2038年仅对应31位.那么为什么我们抛出一点呢?通过使用完整的32位,我们可以希望我们不必解决问题,因为我们可能首先破坏地球......
对评论的反应:当然是因为它已签名,但为什么时间戳必须签名?这就是这个问题的重点.