C#中System.DateTime.Now.Ticks返回值是否受夏令时切换影响?
C#中System.DateTime.Now.Ticks与夏令时的关系
System.DateTime.Now.Ticks的返回值完全不受夏令时切换影响,也不会出现1小时的跳变。
原因很直白:
- Ticks本质是从公元0001年1月1日00:00:00.0000000 UTC开始累计的100纳秒间隔数,是一个绝对时间戳,和本地时区、夏令时规则没有任何关联。
DateTime.Now只是将当前UTC时间转换为本地时区的显示时间,但它的Ticks属性依然对应着该时间点的绝对UTC刻度值。夏令时切换仅改变本地时间的显示方式(比如跳过或重复某一小时),但UTC时间是连续流动的,因此对应的Ticks值也会连续递增,不会出现跳变。
举个实际场景的例子:
- 美国夏令时开始时,本地时间会从周日的2:00直接跳到3:00,但此时UTC时间是连续推进的,所以两次调用
DateTime.Now.Ticks得到的值依然是连续增加的,不会跳过对应1小时的Tick数。 - 夏令时结束时,本地时间会从周日的2:00回退到1:00,此时两次获取的本地时间都是1:00,但它们的
Ticks值会相差3600亿(1小时=3600秒,每秒1亿Ticks),因为这两个本地时间对应的是两个不同的UTC时间点。
总结:无论本地时区是否切换夏令时,DateTime.Now.Ticks都是连续递增的绝对时间标识,不会因夏令时规则产生跳变。
内容的提问来源于stack exchange,提问作者Garfield the Grug Brained
相关产品推荐
相关产品推荐

