标签: year2038

是否存在类似于y2k的y2k12问题?

这是一个异想天开的问题,部分受到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

有任何想法吗?

datetime y2k year2038

2
推荐指数
2
解决办法
1131
查看次数

Linux 内核中的 64 位 time_t

我已经编译了内核 3.19.1 但仍然有问题time_t。只是一个简单的程序,cout << sizeof (time_t);给出的大小为 4 个字节,而不是我的意图的 8 个字节。

我应该在 make menuconfig 期间打开特定选项吗?

linux 64-bit kernel time-t year2038

2
推荐指数
1
解决办法
1万
查看次数

作为签名整数的时间

我一直在阅读Y2038问题,我明白time_t最终将恢复到最低可表示的负数,因为它会尝试"递增"符号位.

根据该Wikipedia页面,time_t无法更改为无符号整数,因为它会破坏处理早期日期的程序.(这是有道理的.)

但是,我不明白为什么它首先没有成为无符号整数.为什么不将1970年1月1日存储为零而不是一些荒谬的负数?

time unsigned signed year2038

1
推荐指数
1
解决办法
406
查看次数

PHP:setcookie()将在2038年之后到期

目前我正在将我所有的PHP unix时间戳转换为2k38以上的问题.

我注意到setcookie() expire date参数使用unix时间戳.有没有办法用替代方法设置过期日期,也许以某种方式使用DateTime类?

从有关过期日期的PHP文档:

注意:您可能会注意到expire参数采用Unix时间戳,而不是日期格式Wdy,DD-Mon-YYYY HH:MM:SS GMT,这是因为PHP在内部执行此转换.

php cookies unix-timestamp year2038

1
推荐指数
1
解决办法
600
查看次数

是在 2038 年之后保存使用 System.currentTimeMillis() 吗?

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 android year2038

1
推荐指数
1
解决办法
236
查看次数

如何使今年的2038年问题junit测试按预期工作

我正在编写一些代码,由于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'

java junit year2038

0
推荐指数
1
解决办法
33
查看次数

为什么我们不使用完整的32位来存储自纪元以来136年?

我已经多次见过,例如在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位,我们可以希望我们不必解决问题,因为我们可能首先破坏地球......

对评论的反应:当然是因为它已签名,但为什么时间戳必须签名?这就是这个问题的重点.

c mysql unix epoch year2038

-2
推荐指数
1
解决办法
1427
查看次数

标签 统计

year2038 ×7

java ×2

64-bit ×1

android ×1

c ×1

cookies ×1

datetime ×1

epoch ×1

junit ×1

kernel ×1

linux ×1

mysql ×1

php ×1

signed ×1

time ×1

time-t ×1

unix ×1

unix-timestamp ×1

unsigned ×1

y2k ×1