在计算DateTimes之间的持续时间时安全处理夏时制(或任何其他理论上的非恒定偏移量)>>

问题描述 投票:1回答:1

我知道,即使在过去的24小时内,这也不是第一次提出这个话题,但是令我惊讶的是,我还没有找到解决这个问题的明确/最佳实践的解决方案。这个问题似乎也与我认为毫无保留地将所有日期保存在UTC中的决定相矛盾。我会在这里尝试说明问题:

给出两个DateTime对象,在考虑夏令时的同时找到它们之间的持续时间。

请考虑以下情形:

  1. UtcDate-LocalDate,其中LocalDate比a早1毫秒DST切换。

  2. LocalDateA-LocalDateB,其中LocalDateB为1DST切换之前的毫秒。

  3. UtcDate-LocalDate.ToUtc()提供的持续时间不考虑DST开关。 LocalDateA.ToUtc()-LocalDateB.ToUtc()是正确的,但LocalDateA-LocalDateB也忽略了DST。

现在,显然有are

个解决方案。我现在使用的解决方案是此扩展方法:
public static TimeSpan Subtract(this DateTime minuend, TimeZoneInfo minuendTimeZone, 
    DateTime subtrahend, TimeZoneInfo subtrahendTimeZone)
{
    return TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(minuend, 
        DateTimeKind.Unspecified), minuendTimeZone)
        .Subtract(TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(subtrahend, 
            DateTimeKind.Unspecified), subtrahendTimeZone));
}

我猜它能起作用。我对此有一些问题:

  1. 如果日期在保存之前全部转换为UTC,则此方法将无济于事。时区信息(以及DST)丢失。我已经习惯于始终将日期保存为UTC,是DST的问题还不足以使它变得糟糕决定?

  2. [不太可能有人会意识到这种方法,甚至考虑这个问题时,计算之间的差异日期。有没有更安全的解决方案?

  3. 如果我们一起努力,也许科技行业可以说服大会废除夏令时。

我知道,即使在过去的24小时内,这也不是第一次提出这个话题,但是令我惊讶的是,我还没有找到解决这个问题的明确/最佳实践的解决方案。 ...

c# date timezone dst
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.