有人知道是否有可能在不中断时间轴的情况下从夏令时切换到冬令时吗?我有一个应用程序,它使用时间戳记录交易。问题是,我的时间戳不能重叠。如果我简单地将时钟从凌晨 3 点切换到凌晨 2 点,就会出现重叠。这意味着我可以将时间翻倍,例如 2:30。
但是,如果时间从下午 2 点开始走慢一倍,我就能毫不间断地在下午 3 点获得正确的时间,并且时间线也不会中断。
那么,有人知道是否有支持此功能的协议吗?NTP 似乎不支持此功能。而且没有机会更改应用程序,上次我们只是将其停止了一个小时,但肯定有更好的方法。
答案1
答案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 个单词。