【问题标题】:how DateTime and TimeZoneInfo classes handles the daylight saving?DateTime 和 TimeZoneInfo 类如何处理夏令时?
【发布时间】:2021-01-08 04:00:18
【问题描述】:

我试图了解 .net 如何处理夏令时。当我调用IsDaylightSavingTime 方法并传递日期实例时,它为今天的日期返回true。如果我在同一日期实例上调用 DateTime 的 IsDaylightSavingTime 方法,它会返回 false。

为什么同一日期实例会得到不同的结果?

public static void Main()
{
    var zone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
    
    var utcNow = DateTime.UtcNow;
    var pacificNow = TimeZoneInfo.ConvertTimeFromUtc(utcNow, zone);
    
    Console.WriteLine(zone.IsDaylightSavingTime(pacificNow)); // Prints True
    Console.WriteLine(pacificNow.IsDaylightSavingTime()); // Prints False
}

这里是小提琴的link

【问题讨论】:

    标签: c# .net timezone dst


    【解决方案1】:

    第一行打印True,因为它打印的是太平洋时间是否处于夏令时。太平洋时间在 2020 年 11 月 1 日更改为标准时间,今天是 9 月 21 日,所以现在是夏令时。

    第二行打印False,因为它在您的计算机所在的任何时区都不是夏令时。这是因为对于DateTimes 类型为LocalUnspecifiedDateTime.IsDaylightSavingTime 使用您的计算机的系统时区来确定其结果:

    该方法判断当前DateTime值是否在TimeZoneInfo.Local属性返回的本地时区的夏令时范围内。

    TimeZoneInfo.Local:

    本地时区是执行代码的计算机上的时区。

    时区实际上并不是DateTime 的一部分,因此pacificNow.IsDaylightSavingTime() 不知道您希望它使用太平洋时间。

    【讨论】:

      猜你喜欢
      • 2011-10-25
      • 2014-02-22
      • 2015-04-09
      • 2012-07-03
      • 2011-06-26
      • 2019-12-16
      • 2013-06-08
      • 2016-01-28
      • 2013-03-18
      相关资源
      最近更新 更多