IsDaylightSavingTime在1:00而不是2:00触发

时间:2018-01-03 14:10:06

标签: c# dst

我只是想确定给定日期是否属于夏令时。 2017年11月5日凌晨2点应该是触发器。

  • 如果我的输入是11/5/17 00:00:00,则DST
  • 的输出为真
  • 如果我的输入是11/5/17 01:00:00,则DST
  • 的输出为false

我原本预计凌晨1点是真的,而凌晨2点对DST来说是假的

这是我的代码

var dateTime = new DateTime(2017,11,5,0,0,0);
var targetTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

if (targetTimeZone.IsDaylightSavingTime(dateTime)) {
    Console.WriteLine("Daylight Saving Time");
}

1 个答案:

答案 0 :(得分:1)

来自the documentation(在备注部分):

  

如果dateTime参数指定当前对象时区中的模糊时间,TimeZoneInfo.IsDaylightSavingTime方法将dateTime解释为标准时间,如果Kind属性为DateTimeKind.Local,则返回false DateTimeKind.UnspecifiedDateTimeKind.Utc。如果Kind属性为IsAmbiguousTime,则此方法将选择正确的模糊时间并指示它是否为夏令时。

然后继续解释IsDaylightSavingTime,以及一个展示如何使用它们的长示例,它与您描述的场景非常匹配。

另请注意,接受DateTimeOffset参数的{{1}}的重载没有此问题,因为当存在偏移时值不能模糊 - 类似于Kind为UTC时。