【发布时间】:2017-04-04 09:04:46
【问题描述】:
时区和夏令时的变化尤其让我感到困惑。在英国,我们有 GMT/BST:
在英国的最后一个星期日凌晨 1 点,时钟会提前 1 小时 3 月,10 月的最后一个星期日凌晨 2 点返回 1 小时。这 时钟提前 1 小时的时期称为英国夏令时 (英国夏令时)。
给定当地时间 00:00,我希望能够计算到当地时间 03:00 的时间。通常这只是 3 小时,但在 3 月 26 日(3 月的最后一个星期日)00:00 - 03:00 实际上是 2 小时。同样,当时钟在 10 月从 00:00 到 03:00 倒退时是 4 小时。
.Net DateTime 类及其方法对我来说是微不足道的还是我需要小心?
在我的情况下,我正在使用字符串,所以我正在寻找一种方法:
TimeSpan DifferenceBetweenLocalTimes(string startDateTime,string endDateTime)
我可以看到像TimeZoneInfo.IsDaylightSavingTime 这样的东西,但是如何使用它来做我希望的事情并不明显。我的应用程序将每个日历日的当地午夜视为一个严格的界限,即不是每天都是 24 小时,每年一次我得到一天 23 小时和一天 25 小时。
【问题讨论】:
-
作为一个附带问题...如果我有
endDateTime = 26/3/2017 01:30鉴于时钟从 01:00 -> 02:00 在该日期跳跃会发生什么?这个时间真的存在吗?! -
嗯,你可以自己回答这个问题。答案是肯定的,时间已经存在,没有.net 不会为你做夏令时,不同的时区会在一年中的不同时间做。如果你有时区,你也许可以做时差。
-
所以 DST 更改是由 Windows 更改时区直接驱动的,而 .Net 对此一无所知?即它的工作方式与我在这两次手动更改控制面板中的时区完全一样?
-
您可以使用 UTC 进行所有逻辑处理,并且只对输出进行本地化?
-
@ChrisPickford 我不确定当我将午夜作为我的严格界限时它会如何工作;一年一次,我的一天是 23 小时,一年一次是 25 小时……在 Utc 工作不会隐藏这一点吗?