DateTime差异运算符考虑夏令时?

Mic*_*tov 9 .net datetime operator-overloading dst

据我所知,该DateTime类型的差异运算符考虑了闰年:所以

new DateTime(2008, 3, 1) - new DateTime(2008, 2, 1) // should return 29 days
new DateTime(2009, 3, 1) - new DateTime(2009, 2, 1) // should return 28 days
Run Code Online (Sandbox Code Playgroud)

但是夏令时呢?

Ori*_*rds 2

我认为不会。该文档只是说 DateTime 存储为自 0001 年 1 月 1 日午夜 12:00:00 以来的刻度数,但它没有说明午夜实际上在哪个时区 - 我不得不假设如果是总是以 UTC 内部存储,他们会这么说。

不过,您可以轻松解决这个问题:只需执行以下操作:

var difference = Dt1.ToUniversalTime() - Dt2. ToUniversalTime()
Run Code Online (Sandbox Code Playgroud)

转换为 UTC 时将考虑夏令时

  • 这实际上很有趣。ToUniversalTime 将在全年中的 2 天中工作除 2 小时之外的所有时间。同时,相应的ToLocalTime(和底层API)会导致Windows在5到7个月内显示不正确的文件修改时间!年份,取决于文件是否在其 DST“模式”(活动或非活动)与当前日期匹配的日期范围内进行了修改。真是个错误。 (2认同)