问题标签 [year2038]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
289 浏览

ruby - 32 位 ruby​​ 1.9.2p290 时间无法处理 2038?

32 位 ruby​​ 1.9.2p290(我必须使用)似乎很难将当前时间增加 25(但不是 24!)年。

产生:

more_time.class = Fixnum

more_time.class = Fixnum

ruby_time.rb:11:in `+': time + 788400000.000000 out of Time range (RangeError) from ruby​​_time.rb:11

我遇到了 2038 年的问题吗?我对 64 位 ruby​​ 1.9.2-p290 没有这个问题。

0 投票
2 回答
1830 浏览

mysql - 为什么我们不使用完整的 32 位来存储 Epoch 以来的 136 年?

我已经看过很多次了,例如在 UNIX 上,在MySQL 时间戳等中:Epoch 从 1970-1-1 开始,但可记录的最大年份是 2038。现在让我数一数:

因此,如果我们使用完整的 32 位,我们自然会毫无问题地到达 2106 年。但显然 2038 年仅对应 31 位。那么为什么我们要扔掉一点呢?通过使用完整的 32 位,我们可以希望我们不必解决这个问题,因为我们可能会首先摧毁地球......

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

0 投票
1 回答
65 浏览

rfc - 如何应对 RFC 过时的风险?

RFC 4880是描述 OpenPGP 加密标准的文档,其根源在于1998年发布的RFC 2440(那是16 年前,据说在 64 位系统出现之前)。两种规范都说明了如何处理时间戳:

3.5 . 时间字段

时间字段是一个无符号的四字节数字,包含自 UTC 1970 年 1 月 1 日午夜以来经过的秒数。

是否应该尝试尽可能地遵循 RFC (并且,在这里,有一天会面临一个甜蜜的2038 年错误)?开发人员不遵循部分标准/规范/RFC(尤其是在密码学方面)是否“有风险”,因为它们已经被视为可能已经过时了?

我有点害怕问,因为这个问题听起来很傻,但是如果我以我自己的方式“实现 RFC 4880”,那它就不再是官方的事情了。那么,针对她认为“过时”的规范部分,开发人员应该做的最好的事情是什么?没有什么?

0 投票
1 回答
90 浏览

perl - perl, int 自 1970 年以来的秒数

使用旧版本的EPrints软件,我使用此函数 EPrints::Time::datestring_to_timet返回自 1970 年以来的整数秒数

如果在未来一年使用,我得到一个负数:

结果:

这里有什么问题?

0 投票
1 回答
192 浏览

php - PHP mktime 在 64 位系统上不返回大整数值

在尝试使 2038 年的 unix_timestamps 更大时,我遇到了 PHP 函数mktime的问题。我有 64 位操作系统。

服务器上的 PHP 版本: php -v提供 PHP 5.1.6 (cli)(构建时间:2010 年 11 月 29 日 16:47:46)

php -r 'echo PHP_INT_MAX;'给 9223372036854775807

php -r 'var_dump( mktime(0, 0, 0, 4, 1, 2099) );'给出布尔(假)

在开发服务器上 php -r 'var_dump( mktime(0, 0, 0, 4, 1, 2099) );'给出 int(4078677600)

这个 PHP 函数在 64 位系统上无法正常工作的原因可能是什么?strtotime也不适用于年份大于 2038 的日期

0 投票
2 回答
102 浏览

php - PHP date() 因 32 位的高时间戳而失败

我偶然发现了这个问题:

期望和正确的结果(在本地主机上):

2114 年 9 月 30 日星期日 10:31:58 +0100

结果不正确(远程):

1978 年 8 月 24 日星期四 04:03:42 +0100

在 32 位平台上运行脚本时会得到错误的结果。我认为这是著名的 Y2038 问题,但我应该如何解决它?

如果我回显时间戳(当存储在变量中时),它显示正常,但date()会破坏它(我假设转换为 int32)。

4567743118

[如果相关,它是来自 debian repos 的 PHP 5.4.4]

0 投票
1 回答
476 浏览

php - PHP如何本地化2038年之后的日期

我尝试使用 2038 年之后的本地化日期和 php

strftime 使用时间戳,所以它在 2038 年之后不起作用

DateTime 未本地化...

所以我尝试将 IntlDateFormatter 与 DateTime 一起使用:

我在这里得到: datefmt_format:无法获取时间戳:U_ILLEGAL_ARGUMENT_ERROR

其实我猜 IntlDateFormatter 在内部将日期转换为时间戳......

那么我如何在 php 中本地化超过 2038 的日期?

0 投票
2 回答
6503 浏览

linux - Linux 内核中的 64 位 time_t

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

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

0 投票
1 回答
1037 浏览

android - Google Calendar API(Android 应用程序)中的“2038 年_问题”

我正在构建一个 Android 应用程序,该应用程序使用户能够将事件插入 Google 日历和外部日历(如 Exchange 帐户)。

问题在于,如果用户想要在 2038 年之后添加事件,它会在过去创建事件(例如 - 2038 年 1 月变为 1901 年 12 月,2038 年 7 月 4 日变为 1902 年 5 月 28 日)。我做了一些研究,发现问题是“ 2038 年问题”。

2038 年问题是计算和数据存储情况的问题,其中时间值被存储或计算为有符号的 32 位整数,该数字被解释为自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数. 这样的实现不能对 2038 年 1 月 19 日 03:14:07 UTC 之后的时间进行编码。

可以用 Unix 有符号 32 位整数时间格式表示的最晚时间是 2038 年 1 月 19 日星期二 03:14:07 UTC(1970 年 1 月 1 日之后的 2,147,483,647 秒)。超出此时间的时间将“环绕”并在内部存储为负数,这些系统会将其解释为发生在 1901 年 12 月 13 日而不是 2038 年 1 月 19 日。这是由整数溢出引起的。

似乎我的 Java 代码工作正常,我得到的毫秒数还可以,但是当我将值发送到 Google APIinsert函数时 - 我认为它不知道如何处理它,然后它在错误的日期插入事件( 1901 年及以上)。有什么办法可以处理吗?

这是我的代码:

这是关于插入事件的 Google 文档:http: //developer.android.com/guide/topics/providers/calendar-provider.html#add-event

0 投票
1 回答
374 浏览

time - 面对计算机中的定时炸弹?

它是关于时间的表示,使用 anint存储自 1970 年 1 月 1 日以来的秒数。

使用这种表示的程序何时会面临定时炸弹?发生这种情况时应该如何进行?