当前位置:网站首页>这个困扰程序员50年的问题,终于要被解决了?
这个困扰程序员50年的问题,终于要被解决了?
2022-08-03 03:20:00 【Hollis Chuang】
△Hollis, 一个对Coding有着独特追求的人△

这是Hollis的第 395 篇原创分享
作者 l Hollis
来源 l Hollis(ID:hollischuang)

近日,Google、微软、facebook 和亚马逊终于忍不了了,联合呼吁废除闰秒,什么是闰秒呢?闰秒到底做错了什么?为什么各大互联网公司想要废除他呢?
什么是闰秒
闰秒概念是 1972 年提出的,之所以有这个概念,主要是因为由于潮汐等自然现象的影响,地球的自转速度并不是恒定的。
所以,每隔一段时间世界标准时间「协调世界时(UTC)」会依据地球围绕太阳运动计算的「世界时(UT)」之间出现小的偏差。
所以就需要对协调世界时进行调快或者拨慢1秒来消除这个偏差。
闰秒分为正闰秒和负闰秒,正闰秒表示需要在UTC中插入1秒,负闰秒表示需要在UTC中减少1秒。
闰秒的发生
当科学家们发现”哎呀、今年的地球转的有点快呀,赶紧加一个闰秒来校正一下吧“,这个时间就会发生”正闰秒”。
当闰秒发生时,就需要通过网络时间协议NTP (Network time protocol)来进行时间同步,NTP服务器会一级一级地下发闰秒事件通知直到最边缘的NTP服务器,然后NTP服务器就会把闰秒通知发给客户端的操作系统,由操作系统来处理闰秒通知。
如果你的计算机系统没有开启NTP服务,那么导致的问题就是你的计算机上的机器时间就会比世界时间慢1秒。
如果开了NTP服务的话,就需要操作系统来处理这个闰秒。
闰秒的处理
一般来说,闰秒的调整一般被安排在6月30日或者12月31日,一般会调整在最后一分钟,也就是说,某一年的6月30日的11:59分有61秒。那么计算机系统会如何处理这个闰秒呢?
一般有以下几种方式,如:
1、直接显示23:59:60这样的时间。
2、显示两次23:59:59这个时间。
3、把这一秒平均分到最后一分钟的每一秒钟,也就是11:59还是有60秒,但是每一秒的时长是1+1/60 秒。
不同的操作系统,不同操作系统的不同版本,都会有不同的处理方式,所以我们的代码就需要有足够的鲁棒性来兼容这些闰秒的处理方式,如果没有做好兼容,那么就会发生各种各样的问题。
如需要兼容对23:59:60的处理;如操作会出现两次23:59:59,这对于一些对时间有精确的强依赖的程序来说,可能就会导致致命的问题,尤其是一些依赖时间戳的服务或者工具。
闰秒的危害
50年来,闰秒已经出现过27次,每一次出现都是一片”哀鸿遍野”,如:
2012 年 7 月 1 日零点, Reddit、Mozilla、领英、Yelp 和 Amadeus 等网站宕机数十分钟。
2015 年 7 月 1 日零点,全球约 2000 个计算机网络突然短暂中断;美国洲际交易所被迫中止交易 61 分钟。
2017 年 1 月 1 日零点,Cloudflare 等云服务厂商服务突然崩溃。
因为闰秒的发生是受自然现象影响的,所以他完全无法预测也没有任何规律。对于程序员来说,这种无规律的事情,每次发生都需要进行一次特殊处理,而每一次特殊处理都可能要付出惨痛的代价。
所以,这些国际大厂终于忍不了站出来呼吁废除闰秒了,作为一个程序员,我举双手+双脚赞成!
参考资料:
https://www.qbitai.com/2022/07/36387.html
https://www.163.com/dy/article/HD9ESP2T0531M1CO.html?f=post2020_dy_recommends
https://os.51cto.com/article/345796.html
https://info.support.huawei.com/info-finder/encyclopedia/zh/NTP.html
https://www.zhihu.com/question/27500849
https://qa.1r1g.cn/unix/ask/23322561
往期推荐金额计算用 BigDecimal 就万无一失了?看看这五个坑吧~~
如果你喜欢本文,
请长按二维码,关注 Hollis.

转发至朋友圈,是对我最大的支持。
点个 在看
喜欢是一种感觉
在看是一种支持
边栏推荐
- leetcode:151. 颠倒字符串中的单词
- C语言实验十二 指针(二)
- 金仓数据库 Pro*C 迁移指南( 4. KingbaseES 的 Pro*C 迁移指南)
- Best Practices for Migration from Jincang Database from MySQL to KingbaseES (3. MySQL Database Migration Practice)
- Methods annotated with ‘@Async‘ must be overridable
- leetcode:162. 寻找峰值
- iScroll系列之下拉刷新 + 上拉加载更多
- 中原银行实时风控体系建设实践
- uniapp中动态修改导航栏标题
- 第三方支付--分账对接
猜你喜欢

我终于逃离了互联网,却陷入了迷茫

log4j设置日志的时区

Chinese valentine's day??To the liver is the way!!!!!Auto. Js special position control method

Sentinel vs Hystrix 限流对比,到底怎么选?

基于flowable的upp(统一流程平台)运行性能优化(3)

C语言——-动态内存开辟与管理(malloc,free,calloc,realloc)+柔性数组

leetcode:149. 直线上最多的点数

Task Scheduler 计划定时任务,修改时报错: One or more of the specified arguments are not valid

js Fetch返回数据res.json()报错问题

leetcode:152. 乘积最大子数组
随机推荐
QT之鼠标和键盘事件重写
Auto.js Pro 编写第一个脚本hello world
对话框管理器第四章:对话框消息循环
C语言实验十二 指针(二)
sql问题,如何能做到先声明表的名称,例如product202201,表示2022年一月份的货物表,再在声明过的表中查找,下面的代码运行时有错误显示找不到表table_name,请问改如何进行修改
Jincang Database Pro*C Migration Guide ( 5. Program Development Example)
基于 Cyclone IV 在 Quartus 中配置 IP 核中的 PLL、RAM 与 FIFO 的详细步骤及仿真验证
Guys, I don't understand a bit: why the documentation of oracle-cdc writes that the connector can be done exactly-o
【剑指offer】——股票的最大利润
智能健身动作识别:PP-TinyPose打造AI虚拟健身教练!
软件测试个人求职简历该怎么写,模板在这里
单元测试是什么?怎么写?主要测试什么?
SPI机制是什么?
stdio.h(本机代码)
百度超级链:鼓励企业做自己的链
Kotlin multiplication, how do I multiply smaller and smaller?
工作两年成跳槽高峰期,程序员会在一家公司待多久?
网工知识角|华为网络工程师,华为、华三、思科设备三层交换机如何使用三层接口?命令敲起来
Auto. Js scripts run time calculated Pro
Base64编码原理


