冬夏时间切换,时间线不中断

4 ntp

有人知道是否有可能在不中断时间线的情况下从夏季切换到冬季。我有一个使用时间戳记录事务的应用程序。问题是,我不能有重叠的时间戳。如果我只是将时钟从凌晨 3 点切换到凌晨 2 点,则会出现重叠。意味着我可以有两倍的时间 2:30 例如。

但是,如果时间在下午 2 点开始慢两倍,我会在下午 3 点获得正确的时间,不会中断,也不会中断时间线。

那么有人知道是否有支持此功能的协议吗?NTP 似​​乎没有这样做。而且没有机会改变应用程序,上次我们只是停止了一个小时,但必须有更好的东西。

Kyl*_*ndt 19

我会在 UTC(协调世界时)中记录所有内容,这样就不会观察到夏令时。它是 Linux 服务器的常见默认时间设置。

然后,您可以在应用程序层同时显示 UTC 和本地时区时间。

您可能会对阅读tzdata包感兴趣。

来自那篇维基百科文章:

UTC 不会随着季节的变化而变化,但如果时区管辖区遵守夏令时或夏令时,则当地时间或民用时间可能会发生变化。例如,UTC 在美国东海岸冬季比当地时间早 5 小时,而在夏季则比当地时间早 4 小时。


sle*_*ske 6

不,没有办法做到这一点。当地时间只是重叠,对此您无能为力。您当然可以在 DST 更改期间使用某种滑动转换,但这会使事情进一步复杂化(例如转换期间的时间戳会很奇怪)。

最简单的解决方案(可能是唯一的解决方案)是使用 UTC 来记录时间戳。在显示时间时,您可以随时将时间转换为您喜欢的任何当地时间。


Jon*_*ler 5

我同意 Kyle Brandt 的观点,即登录 UTC 是最好的。如果这是不可接受的(并且没有以“同一时间”记录相隔一小时的事件),则在日志中报告时区偏移量(以及或代替时区名称),以便你看:

2009-11-01 01:59:59 -07:00 ...event 1...
2009-11-01 01:00:00 -08:00 ...event 2...one second after event 1...
Run Code Online (Sandbox Code Playgroud)

这为需要的人提供了完整的信息;但对于那些不这样做的人来说,它很容易被忽略。上面隐含的时区是“US/Pacific”(或首选名称 America/Los_Angeles),是 2009 年的正确时区切换。

显示的日期格式是ISO 8601:2004标准符号的次要变体。有不同的“标准”符号:

2009-11-01T01:59:59-07:00
20091101T015959-0700
Run Code Online (Sandbox Code Playgroud)

后者是人类无法读取的(但紧凑且易于程序读取)。前者的优点是整个时间字符串是一个“单个词”,而不是我使用的符号中的 3 个词。