您尚未登录。

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

dgtg
会员
注册时间: 2017-11-08
已发帖子: 255
积分: 214.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
已发帖子: 255
积分: 214.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
已发帖子: 255
积分: 214.5

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

xiang 说:

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

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

离线

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

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

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

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

离线

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

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

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

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

离线

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

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

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
已发帖子: 522
积分: 643
个人网站

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
已发帖子: 255
积分: 214.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
已发帖子: 255
积分: 214.5

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

aozima 说:

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

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

离线

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

aozima
会员
所在地: 深圳
注册时间: 2019-05-25
已发帖子: 451
积分: 318.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
已发帖子: 255
积分: 214.5

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

mengxp 说:

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

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

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

离线

页脚

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

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