冬季和夏季时间在时间​​轴上切换

有没有人知道是否有可能从夏季转到冬季,而不会中断时间表。 我有一个使用时间戳logging事务的应用程序。 问题是,我不能有重叠的时间戳。 如果我简单地将时钟从凌晨3点切换到凌晨2点,我有一个重叠。 意思是我可以有两次两点半的时间。

但是,如果时间在下午2点开始慢两倍,我会在下午3点正确的时间没有中断,没有一个破碎的时间表。

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

我会logging在UTC( 协调世界时 )的一切,这样夏令时从来没有被观察到。 这是Linux服务器的通用默认时间设置。

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

阅读关于tzdata包可能是你感兴趣的。

从那个维基百科文章:

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

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

最简单的解决scheme(可能是唯一的解决scheme)是使用UTClogging时间戳。 您可以随时将时间转换为显示时所需的当地时间。

我同意凯尔·布兰特(Kyle Brandt)的说法,即以UTClogging是最好的。 如果这是不可接受的(也没有事件发生在同一时间logging的一个小时),然后在日志中报告时区偏移量(以及,或者而不是时区名称),以便你看:

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... 

这给那些需要它的人提供了完整的信息。 但对于那些不这样做的人来说,这是相当容易忽略的。 上面隐含的时区是“美国/太平洋”(或者是美国/洛杉矶的首选名称),是2009年的正确时区。

所显示的date格式是ISO 8601:2004标准表示法的一个小变体。 有不同的“标准”符号:

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

后者不能被人读取(但是是紧凑的并且易于被程序读取)。 前者的优点是,整个时间string是一个“单个字”,而不是我使用的符号中的三个字。