当时间不同步时,我知道大多数现代操作系统都有 NTP 软件,它们以智能增量执行它,将它分布在一个很大的时间间隔内,这样它就不会影响大多数软件。
但是,我无法理解对于将时间倒退 1 小时的区域如何做到这一点——这是如何实际发生的内部细节。作为工程师,我们使用 UTC 来确保我们从这些问题中抽象出来,程序只解释 UTC 时间,这是单向流,但在许多情况下程序处理本地时间并不少见,例如,登录当地时间等
DST 倒退 1 小时等如何在主要操作系统及其发行版内部准确运行?我正在寻找细节 - 例如,假设伦敦在 10 月 25 日将时钟从凌晨 2:00 调回凌晨 1:00。一些时区还提供信息,例如在何时必须分散这些信息。所有这些在幕后究竟意味着什么?
(背景:我来自一个全年都遵循固定偏移量的 tz,所以我对此的理解有点有限)
在 linux 系统上,有关时区信息的信息由
tzdata
.官方来源是: https ://www.iana.org/time-zones
更多信息: https ://en.wikipedia.org/wiki/Tz_database
当您在计算机上看到时间时,它是一系列计算的结果。实际上,时间是从过去的某个时间点开始以秒为单位测量的,并且每个设备的时间不同,但是当我们更改时区或夏令时时,这个时间不会改变。在 PC 上,这存储在 BIOS 或 UEFI 中。这实际上是我们在 2000 年遇到大问题的原因,但那是另一回事了。
因此,每个具有内部时钟的设备都知道当前时间,因为它知道从开始时间开始已经过去了多少秒。
本质上,该设备有一个电池和一个正在运行的程序,该程序从起点开始持续增加一秒的经过时间。
当您谈论格式化时间时,您必须处理时区和夏令时。
时区根据时区设置以小时为单位更改时钟。如果您在 UTC+3,则时间计算如下:
夏令时生效时,时间变为时间 + UTC+3 +DST+1
这意味着,除了为时区增加 3 小时外,还为夏令时增加了一个小时。
当我们回到冬季时间或 DST+0 时,下次计算日期和时间时,它会自动跳回一小时。
如您所见,计数的基本计时器永远不会改变。
如果您更改计算机上的日期/时间,它基本上会计算已经过去了多少秒,记住时区和夏令时设置,然后将新的差异从起点更改为新的“从" 计时器,这样,您的时间就会正确显示。