Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取准确日光日期的错误UTC偏移小时数_C#_Timezone - Fatal编程技术网

C# 获取准确日光日期的错误UTC偏移小时数

C# 获取准确日光日期的错误UTC偏移小时数,c#,timezone,C#,Timezone,我试图得到像这样的EST时区的特定时间的偏移小时数 var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); est.GetUtcOffset(new DateTime(2020, 3, 9)).Hours; 这工作正常,并返回我-4,这适用于2020年3月9日,因为夏时制在2020年3月8日02:00:00更改,但当我尝试为日期2020年3月8日02:00:00运行相同的代码时,它返回我

我试图得到像这样的EST时区的特定时间的偏移小时数

var est = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
est.GetUtcOffset(new DateTime(2020, 3, 9)).Hours;
这工作正常,并返回我
-4
,这适用于
2020年3月9日
,因为夏时制在
2020年3月8日02:00:00
更改,但当我尝试为日期
2020年3月8日02:00:00
运行相同的代码时,它返回我
-5
,而我的理解是,从3月8日凌晨2点开始,它应该开始返回我-4

为了得到-4,我必须在凌晨3点运行它,也就是日光变换后的一个小时


但为什么会这样呢?为什么我必须增加一个小时才能使日光变化生效?

来自以下内容的备注部分:

。。。如果
dateTime
不明确,或者转换的时间不明确,此方法将不明确的时间解释为标准时间。如果
dateTime
无效,此方法将返回反映UTC和时区标准时间之间差异的
TimeSpan
对象

datetime
2020-03-08 02:00:00
,在美国东部时区无效,因为时钟从那天的01:59:59提前到03:00:00。因此,
GetUtcOffset
使用其所描述的返回标准时间偏移的行为。如果您第一次打电话,您可以检测到这一点


您可能还希望使用
TimeZoneInfo
中的其他方法来应用特定行为。例如,在约会计划场景中,通常需要使用我在
ToDateTimeOffset
扩展方法中介绍的行为。

因为这种更改会使时钟从凌晨2点跳到凌晨3点。@juharr-Ah!因此,它跳过了时钟之间的时间差白昼的变化!我从来不知道这件事。因此,基本上,无论白天时间增加/减少了多少小时,都应该跳过以获得正确的偏移量?是的,基本上凌晨2点到凌晨3点的变化并不存在,所以如果你询问这些时间,它只会给出-5偏移量。当它从-4变回-5时更糟糕,因为同一个小时发生两次。明白了!谢谢你提供这些有用的信息。你知道白天时间在任何时区都可以超过一个小时吗?我不知道在任何地方都可以超过一个小时,但我认为有些地方可以改变半小时,而在时区内有些地方根本不会改变。