计算机时间

本文详细介绍了时间定义的演变,从世界时(UT)到国际原子时(TAI),再到协调世界时(UTC),并探讨了闰秒的概念。标准时间的制定和北京时间的由来也在其中。网络时间协议(NTP)用于同步计算机时间,通过精确计算网络延迟来校准时间,避免时光倒流。在时间同步过程中,对于运行中的程序可能产生的影响以及如何避免问题也进行了讨论。
摘要由CSDN通过智能技术生成

计算机时间定义

世界时

世界时,Universal Time,简称 UT

基于天文现象 + 钟表计时,永远与地球自转时间相匹配。

天文现象:地球自转一周为一天,地球公转一周为一年,一天均分为24等分为时,一小时均分为60等分为分,一分钟均分为60等分为秒;

由于自转及公转差异,平均一年时长,得到相对固定的天,后计算时分秒;

缺点:每年的一天时长都不一样,有差异,不够精确;

国际原子时

国际原子时,International Atomic Time,简称 TAI

基于原子钟计时,每一秒的周期完全等长且固定,及其精确,可以说在相当长的时间内每一秒时间跨度相等

缺点:国际原子时极度精确,世界时越来越慢,经过长时间后,可能会与实际生活相违背(极端情况下,世界时是中午12点,国际原子时是晚上6点)

协调世界时

协调世界时,Coordinated Universal Time,简称 UTC

协调世界时 = 原子时 + 世界时协调得出

以原子时为基准,持续观测这个原子时与世界时的差距,如果两者差距过大,则人为的加1秒 or 减1秒,使得两者差距最多不超过0.9秒,如

原子时本身通常比世界时走得快,经过一段时间后,如果发现两者相差越来越大,那就给这个时钟加一秒,让这个时钟在 23:59:59 的下一秒变为 23:59:60 秒,让它与世界时差距控制在 0.9 秒以内,这个操作过程,相当于让快的时钟稍微等一下走得慢的世界时

当然,当地球自转速度变快时,这里也有可能是减一秒,即从 23:59:58 直接跳到 00:00:00。但这种情况比较少,大部分情况下,地球自转速度是越来越慢的。

而加的这一秒,科学家把它定义为 闰秒

截图

优点:每一秒的计时依旧是精确的,而且还兼顾了日常生活使用的世界时

标准时间

各国自己制造原子钟,计算协调世界时,并每月将计算的协调世界时上报国际权威机构,国际权威机构根据各国实验室的精度,加权计算得出真正的协调时间时。

然后,再把这个最终的时间下发到各个国家,让各个国家对表校准,保证全世界的时间误差在 100 纳秒以内,这就是标准时间。

中国配合协调世界时的机构是 中国科学院国家授时中心,它位于中国的陕西省渭南市蒲城县,因为陕西省处于中国中部,向中国各个地方授时时延相对平均。

北京时间

中国在UTC的基础上+8h(中国位于东8区),得到的时间即为北京时间。


这套时间标准于 1972 年正式确定,一致沿用至今。

授时

定义:中国科学院国家授时中心,产生北京时间后,会通过一系列方式,把这个时间广播出去,这个过程,就叫做 授时。

通常来说,无线电波的传播速度更快、传播误差小,所以授时中心会通过这种方式,把时间发送给全国各地的 时间服务器,时间服务器再给其他终端提供时间同步服务。

网络时间协议NTP

网络时间协议NTP(Network Time Protocol),保证每台机器的时间与时间服务器保持同步。

NTP如何同步时间

截图

通过在网络报文上打 时间戳 的方式,然后配合计算网络延迟,从而修正本机的时间。

client服务器向server时间服务器请求时间同步:

  1. client向server时间服务器发出时间同步请求,并带上自己这边的时间戳t1;
  2. server时间服务器记录接收到同步请求的时间t2 及 发出响应的时间t3;
  3. client服务器记录接收到server时间服务器响应的时间t4;

假设网络来回路径是对称的,并且时延相同,由此,可以计算:

  • 网络延时 = (t4 - t1) - (t3 - t2)
  • 时间差 = t2 - t1 - 网络延时 / 2 = ((t2 - t1) + (t3 - t4)) / 2

客户端通过这种方式就可以 校准 自己的本机时间了,与服务端保持同步,这个时间误差在广域网下是 10ms - 500ms,在局域网下通常可以小于 1ms。

同步时间时对正在运行的程序有无影响

墙上时钟

世界协调时 UTC,校准时间后,可能发生回拨,如

t1 = time.now()
// 时间发生校准
t2 = time.now()

// t2比t1小怎么办?
elapsed = t2 - t1
单调时间

计算机自启动以后经历的纳秒数,不会回拨

时间校准时如何避免时光倒流

NTP提供了两种方式:ntpdate 和 ntpd

  • ntpdate :一切以服务端时间为准,强制修改 本机时间

  • ntpd :采用 润物细无声 的方式修改本机时间,把时间差均摊到每次小的调整上;

    ntpd 当接收到需要 回拨 的时间时,会让本机时间走得 慢 一点,小步调整,逐渐与服务端的时钟 对齐,这样一来,本机时间依旧是递增的,避免发生 倒流。

    在配置 ntp 服务时,需要格外注意这种情况。另外,在编写程序时,也要注意调用的时间 API 获取的是哪个时间,避免业务逻辑发生异常。


参考:

计算机时间到底是怎么来的?程序员必看的时间知识!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值