冬令时和夏令时切换,时间轴无中断

冬令时和夏令时切换,时间轴无中断

有人知道是否有可能在不中断时间轴的情况下从夏令时切换到冬令时吗?我有一个应用程序,它使用时间戳记录交易。问题是,我的时间戳不能重叠。如果我简单地将时钟从凌晨 3 点切换到凌晨 2 点,就会出现重叠。这意味着我可以将时间翻倍,例如 2:30。

但是,如果时间从下午 2 点开始走慢一倍,我就能毫不间断地在下午 3 点获得正确的时间,并且时间线也不会中断。

那么,有人知道是否有支持此功能的协议吗?NTP 似​​乎不支持此功能。而且没有机会更改应用程序,上次我们只是将其停止了一个小时,但肯定有更好的方法。

答案1

我会以 UTC 格式记录所有内容(协调世界时),这样就永远不会遵守夏令时。这是 Linux 服务器的常见默认时间设置。

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

阅读关于时区数据您可能会对该包感兴趣。

摘自维基百科文章:

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

答案2

不,没有办法做到这一点。当地时间只是重叠,你对此无能为力。当然,你可以在夏令时变化期间使用某种滑动切换,但这会使事情变得更加复杂(例如,切换期间的时间戳会相当奇怪)。

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

答案3

我同意 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...

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

显示的日期格式与ISO 8601:2004标准符号。有不同的“标准”符号:

2009-11-01T01:59:59-07:00
20091101T015959-0700

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

相关内容