您尚未登录。

楼主 # 2022-03-31 17:48:56

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Linux时间戳到2038年后怎办?

各位大神,一直想请教个问题。
就是Linux下的时间戳,time_t长度为32位的,是从1970->2038年1月多....
到2038年后,应该怎样处理呢?
现在UI里面设置时间限制到在2038年...2038年很快也就到了

离线

#1 2022-03-31 17:58:32

cube
会员
注册时间: 2021-03-11
已发帖子: 288
积分: 202.5

Re: Linux时间戳到2038年后怎办?

现在 time_t 已经是64bit了,可以用到人类飞出太阳系那时候。

离线

楼主 #2 2022-03-31 18:10:59

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: Linux时间戳到2038年后怎办?

cube 说:

现在 time_t 已经是64bit了,可以用到人类飞出太阳系那时候。

现在用的ARM IC大都还是32bit吧? 如C100/V3s

离线

#3 2022-03-31 18:14:56

cube
会员
注册时间: 2021-03-11
已发帖子: 288
积分: 202.5

Re: Linux时间戳到2038年后怎办?

和硬件的体系架构没有关系,这个是由软件处理的。

离线

#4 2022-03-31 22:47:42

xiang
会员
注册时间: 2021-01-30
已发帖子: 29
积分: 34

Re: Linux时间戳到2038年后怎办?

linux5.10 kernel已经修好了,能熬到2486年,但其他程序就难说了

离线

楼主 #5 2022-04-01 10:09:19

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: Linux时间戳到2038年后怎办?

xiang 说:

linux5.10 kernel已经修好了,能熬到2486年,但其他程序就难说了

linux 3.x和4.x的呢 ?
现在有两个项目在用

离线

#6 2022-04-01 10:54:16

小智
会员
注册时间: 2019-10-16
已发帖子: 112
积分: 84

Re: Linux时间戳到2038年后怎办?

有没有一种可能性,你的产品用不到2038年

离线

#7 2022-04-01 10:57:00

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 462
积分: 329.5
个人网站

Re: Linux时间戳到2038年后怎办?

最近开始在项目中使用64位时间戳了,客户验收都要设置到2038年以后。

离线

#8 2022-04-01 11:01:32

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 650
积分: 783
个人网站

Re: Linux时间戳到2038年后怎办?

dgtg 说:
xiang 说:

linux5.10 kernel已经修好了,能熬到2486年,但其他程序就难说了

linux 3.x和4.x的呢 ?
现在有两个项目在用

看下内核源码 include/linux/types.h 头文件里的 time_t 是多少位就知道了。

我的 linux 4.x内核,我看了下, time_t 是long型的,所以是32位(long long才是64位)。

然而,我的libc里的time_t是64位的。主要还是看内核?

最近编辑记录 海石生风 (2022-04-01 11:09:58)

离线

#9 2022-04-01 12:07:08

海石生风
会员
所在地: 深圳
注册时间: 2019-07-02
已发帖子: 650
积分: 783
个人网站

Re: Linux时间戳到2038年后怎办?

经测试:虽然我的libc的time_t是64位但内核的time_t是32位,在UTC时间2038-01-19 03:14:07(即本地时间(东8区)2038-01-19 11:14:07)之后,我的应用程序的时间(通过time(NULL)获取)就变回1901-12-14的时间了,busybox里的date命令也一样。

离线

楼主 #10 2022-04-01 14:28:32

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: Linux时间戳到2038年后怎办?

海石生风 说:

经测试:虽然我的libc的time_t是64位但内核的time_t是32位,在UTC时间2038-01-19 03:14:07(即本地时间(东8区)2038-01-19 11:14:07)之后,我的应用程序的时间(通过time(NULL)获取)就变回1901-12-14的时间了,busybox里的date命令也一样。

是的,我也测试了,2038-01-19后就出错了。
这个问题不得不考虑了。

离线

楼主 #11 2022-04-01 14:29:42

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: Linux时间戳到2038年后怎办?

aozima 说:

最近开始在项目中使用64位时间戳了,客户验收都要设置到2038年以后。

请教下。
您是如何处理的呢?

离线

#12 2022-04-01 16:07:06

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 462
积分: 329.5
个人网站

Re: Linux时间戳到2038年后怎办?

自己做工具链的大项目,直接把工具链接libc里面的time_t升级到64位了。

使用现成工具链不好改的项目,单独把加了套处理时间的代码,不与libc里面冲突。
只是要求应用部分都要使用新的API。

同时也可以在链接脚本上做些处理,让没改的应用尽量不要链接到libc里面老的API去了。
但是无法保证全部拦截掉。

离线

#13 2022-04-02 00:52:05

sun_sky1
会员
注册时间: 2022-03-27
已发帖子: 10
积分: 0

Re: Linux时间戳到2038年后怎办?

在2038年前升级成64位。

离线

#14 2022-04-02 11:45:05

mengxp
会员
注册时间: 2021-10-07
已发帖子: 68
积分: 152

Re: Linux时间戳到2038年后怎办?

kernel 5.1版本新增了 time64 syscall
所以你需要升级到 5.1内核,然后用户态需要musl 1.2+ or glibc 2.32+

如果你说你的sdk没有kernel5.1 那你只能自己想办法,要么换芯片,要么自己给kernel打补丁

最近编辑记录 mengxp (2022-04-02 11:46:05)

离线

#15 2022-04-04 09:42:30

xiang
会员
注册时间: 2021-01-30
已发帖子: 29
积分: 34

Re: Linux时间戳到2038年后怎办?

dgtg 说:
xiang 说:

linux5.10 kernel已经修好了,能熬到2486年,但其他程序就难说了

linux 3.x和4.x的呢 ?
现在有两个项目在用

3.x和4.x官方暂时没打补丁,但之后4.x有望能有补丁,但如果是芯片的sdk基本就没戏了,基本靠自己搞

离线

楼主 #16 2022-04-06 09:40:24

dgtg
会员
注册时间: 2017-11-08
已发帖子: 257
积分: 216.5

Re: Linux时间戳到2038年后怎办?

mengxp 说:

kernel 5.1版本新增了 time64 syscall
所以你需要升级到 5.1内核,然后用户态需要musl 1.2+ or glibc 2.32+

如果你说你的sdk没有kernel5.1 那你只能自己想办法,要么换芯片,要么自己给kernel打补丁

谢谢!
看来是要自己搞了。

离线

#17 2024-05-06 13:12:15

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 462
积分: 329.5
个人网站

Re: Linux时间戳到2038年后怎办?

2038.gif

离线

#18 2024-05-06 15:09:58

memory
会员
注册时间: 2021-08-11
已发帖子: 442
积分: 418

Re: Linux时间戳到2038年后怎办?

# date "2038-1-1"
Fri Jan  1 00:00:00 CET 2038
#
#
# date "2039-1-1"
date: invalid date '2039-1-1'
#
#

果然, TMD,这F1C100s Linux3.10 寿命也就是2038年了。

离线

#19 2024-05-09 11:39:46

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: Linux时间戳到2038年后怎办?

这个问题必须提前解决的。假如某个产品一旦出去就要用个10年以上,那么就要在2028年之前解决该问题。根本不能拖到2038年再说。

离线

#20 2024-05-09 12:13:17

memory
会员
注册时间: 2021-08-11
已发帖子: 442
积分: 418

Re: Linux时间戳到2038年后怎办?

armstrong 说:

这个问题必须提前解决的。假如某个产品一旦出去就要用个10年以上,那么就要在2028年之前解决该问题。根本不能拖到2038年再说。

是呀,各国的军事装备也要检查啊,提前模拟一下2038千年虫,锅锅不想死得不明不白。

离线

#21 2024-05-09 19:09:21

armstrong
会员
注册时间: 2019-04-10
已发帖子: 286
积分: 195.5

Re: Linux时间戳到2038年后怎办?

假如我的产品规划寿命是15年,那么2038回退15年就是2023年;也就是我现在必须已经解决2038问题!

离线

#22 2024-05-11 23:54:26

memory
会员
注册时间: 2021-08-11
已发帖子: 442
积分: 418

Re: Linux时间戳到2038年后怎办?

[01.881][mmc]: mmc exit start
[01.901][mmc]: mmc 2 exit ok
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.191 (memory@ubuntu) (gcc version 5.3.1 20160412 (Linaro GCC 5.3-2016.05) ) #10 SMP PREEMPT Thu Apr 11 08:55:32 CST 2024
#
# date "2039-1-1 12:12:12"
Sat Jan  1 12:12:12 CST 2039
#
#
# date +"%Y-%m-%d %H:%M:%S"
2039-01-01 12:12:14
#
#
#
# date "2049-1-1 12:12:12"
Fri Jan  1 12:12:12 CST 2049
#
#
# date +"%Y-%m-%d %H:%M:%S"
2049-01-01 12:12:14
#

A133 Linux 4.9  2038正常

离线

#23 2024-05-12 00:03:09

varzhou
会员
注册时间: 2020-07-14
已发帖子: 108
积分: 2

Re: Linux时间戳到2038年后怎办?

电子产品很难到哪个时候

离线

#24 2024-05-12 20:14:17

X3
会员
注册时间: 2020-04-08
已发帖子: 85
积分: 73.5

Re: Linux时间戳到2038年后怎办?

全志 T113-S3 Linux5.4 也有这个bug

D1-H 正常

看来64bit系统低版本的Linux就可以用,32bit系统要升高版本的Linux才行?

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn