SystemTime::now是否受夏令时影响?跨夏令时两次调用是否存在异常?
问题解答
首先明确核心逻辑:SystemTime::now() 获取的是基于UTC的系统时间,而UNIX纪元(UNIX_EPOCH)是固定的UTC时间点(1970年1月1日00:00:00 UTC)。夏令时是本地时区的时间调整规则,完全不会影响UTC时间的连续性。
针对你的场景,两次调用不会出现异常行为,原因如下:
- 夏令时生效仅会改变本地时间的显示(比如拨快或拨慢1小时),但UTC时间始终保持连续递增,不受时区规则影响
duration_since(UNIX_EPOCH)计算的是当前UTC时间到UNIX纪元的时间差,这个差值只会单调递增(除非人为回拨系统时间,但这属于独立的异常场景,和夏令时无关)- 无论夏令时是否触发,
SystemTime相关API的返回结果都是稳定连续的,不会出现panic、时间差突然减少等异常情况
补充说明:如果是使用本地时间(比如LocalTime)相关的API,才可能因夏令时出现时间跳变,但SystemTime是和UTC对齐的,完全规避了这类问题。
内容的提问来源于stack exchange,提问作者nz_21
相关产品推荐
相关产品推荐

