UNIX 时间戳

延伸阅读:Y2K38 错误

2038年问题又叫Unix千年臭虫或Y2K38错误。在时间值以带符号的32位整数来存储或计算的数据存储情况下,这个错误就有可能引发问题。

可以用Unix带符号的32位整数时间格式来表示的最大时间是 2038年1月19日03:14:07UTC(2038-01-19T03:14:07Z),这是自 1970-01-01T00:00:00Z 之后过了 2147483647 秒,值的边界如下:

时间 时间戳 二进制字面量
1970-01-01T00:00:00Z 0 00000000 00000000 00000000 00000000
2038-01-19T03:14:07Z 2^31-1, 2147483647 01111111 11111111 11111111 11111111

测试代码:

// 0
long a = 0;
// 2^31-1, 2147483647
long b = Integer.MAX_VALUE;// 1970-01-01T00:00:00.000Z
Instant.ofEpochSecond(a).atZone(ZoneOffset.of("-00:00")).toLocalDateTime()
// 2038-01-19T03:14:07.000Z
Instant.ofEpochSecond(b).atZone(ZoneOffset.of("-00:00")).toLocalDateTime()

过了最大时间后,由于整数溢出,时间值将作为负数来存储,系统会将日期读为1901年12月13日,而不是2038年1月19日。

用简单的语言来说,Unix机器最终将会耗尽存储空间来列举秒数。所以,到那一天,使用标准时间库的C程序会开始出现日期问题。你可以在维基百科上详细的相关内容(https://en.wikipedia.org/wiki/Year_2038_problem)。

下面这个动画显示了2038年错误将如何重置日期:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bIYPNCEB-1612353563376)(https://qidawu.github.io/img/distribute/Y2K38.GIF)]

资料来源:维基百科

目前,2038年错误没有什么通行的解决方案。如果对用于存储时间值的time_t数据类型的定义进行更改,依赖带符号的32位time_t整数性质的应用程序就会出现一些代码兼容性问题。假设time_t的类型被更改为不带符号的32位整数,那将加大最新的时间限制。但是,这会对由负整数表示的1970年之前的日期造成混乱。

使用64位架构的操作系统和程序使用64位time_t整数。使用带符号的64位值可以将日期延长至今后的2920亿年。

已有人提出了许多建议,包括以带符号的64位整数来存储自某个时间点(1970年1月1日或2000年1月1日)以来的毫秒/微秒,以获得至少30万年的时间范围。其他建议包括用新的库重新编译程序,等等。这方面的工作正在开展之中;据专家们声称,2038年问题解决起来应该不难。

参考

UNIX时间 - 维基百科

https://time.is/UTC

UNIX 时间戳总结相关推荐

  1. 日期与unix时间戳之间的转换C++实现

    之前在https://blog.csdn.net/fengbingchun/article/details/107023645 中介绍过gmtime和localtime的区别,这里介绍下日期与Unix ...

  2. 将毫秒转换_Matlab将Unix时间戳转为可读日期

    Unix时间戳有很多在线转换的工具,比如: Unix时间戳(Unix timestamp)转换工具 - 站长工具​tool.chinaz.com时间戳(Unix timestamp)转换工具​tool ...

  3. asp实现UNIX时间戳功能

    asp实现UNIX时间戳功能 utime  = DateDiff("s", "1970-1-1 8:00:00", Now()) 注:为什么不是"19 ...

  4. c语言 北京时间转换utc时间_mysql之unix时间戳和正常时间格式之间的转换

    转载:https://www.cnblogs.com/longzhongren/p/4596278.html 函数:FROM_UNIXTIME 作用:将MYSQL中以INT(11)存储的时间以&quo ...

  5. android 时间戳转换成日期_Matlab将Unix时间戳转为可读日期

    Unix时间戳有很多在线转换的工具,比如: Unix时间戳(Unix timestamp)转换工具 - 站长工具​tool.chinaz.com时间戳(Unix timestamp)转换工具​tool ...

  6. js时间格式化函数,支持Unix时间戳

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...

  7. 如何将Unix时间戳转换为DateTime,反之亦然?

    有此示例代码,但随后开始谈论毫秒/纳秒问题. 自M#的Unix时代以来 ,同样的问题在MSDN上,以秒为单位 . 到目前为止,这是我得到的: public Double CreatedEpoch {g ...

  8. DateTime时间格式转换为Unix时间戳格式

    // DateTime时间格式转换为Unix时间戳格式 public int ConvertDateTimeInt(System.DateTime time) { System.DateTime st ...

  9. python unix时间戳格式化输出_python正常时间和unix时间戳相互转换的方法

    本文实例讲述了python正常时间和unix时间戳相互转换的方法.分享给大家供大家参考.具体分析如下: 这段代码可以用来转换常规时间格式为unix时间戳,也可以将unix时间戳转换回来, 例如:133 ...

  10. mysql UNIX时间戳与日期的相互转换

    UNIX时间戳转换为日期用函数FROM_UNIXTIME() select FROM_UNIXTIME(1156219870); 日期转换为UNIX时间戳用函数UNIX_TIMES*****P() S ...

最新文章

  1. 每日一皮:为什么程序猿是最适合谈恋爱的人
  2. 基本函数依赖和候选键_5G 通信候选波形的设计和评测解决方案
  3. input的值提交不上
  4. 如何修改eclipse里面Android虚拟机的存放路径
  5. 2019年第十届蓝桥杯 - 省赛 - C/C++大学C组 - D. 质数
  6. 2.IDA-数据显示窗口(反汇编窗口、函数窗口、十六进制窗口)
  7. 【SPFA】桐人的约会
  8. [19/03/16-星期六] 常用类_Date时间类DateFormat类
  9. 操作系统之I/O管理:2、I/O软件层次结构
  10. 华为张熙伟:鲲鹏计算产业已汇聚30万开发者
  11. NIO(一)——缓冲区Buffer
  12. (第三场) C Shuffle Cards 【STL_rope || splay】
  13. 【MyBatis】MyBatis找不到mapper文件
  14. 【Missing separate debuginfos, use: debuginfo-install glibc-2.17-222.el7.x86_64】 解决方法
  15. 网卡加到linux网桥,[Linux] ubuntu 14 通过网桥将无线网络桥接给有线网卡
  16. 本博客基于Handsome主题的一些小修改教程
  17. git format-patch命令介绍
  18. sql 判断分钟是偶数数据_mssql sqlserver判断一个整数是否为奇数偶数的方法分享...
  19. 计算机专业用苹果哪款笔记本,最好的苹果笔记本电脑是哪款
  20. 【SugerTangYL】UART串口通信 Verilog

热门文章

  1. Trinity简介(1)--用于无参考基因组的转录组de novo组装
  2. 推荐两款mac管理应用软件
  3. 可视化-three.js 城市 波浪特效 城市 扫光 掠过效果
  4. 360旗下APP再遭苹果下架 巨头频遭“一刀切”
  5. 仕德伟 php 漏洞,网络爱心接力救助绝症女孩——仕德伟网络市场总监朱恋尽“微博”之力...
  6. 如何设置局域网静态ip地址?
  7. 隐藏微信小程序左上角的返回或home按钮 wx.hideHomeButton
  8. java 狗带风波_狗狗风波
  9. OmniPlan-Mac上使用的项目管理软件
  10. SEO免费外链发布工具