为什么DateTimeOffset.Now.Offset和TimeZoneInfo.Local.BaseUtcOffset返回不同的值?

Mat*_*t H 3 c# datetime

我目前在UTC -6中部时区.TimeZoneInfo.Local.BaseUtcOffset返回-6,但DateTimeOffset.Now.Offset返回-5.我不知道为什么这些会有所不同,我找不到可以解释这一点的文件.一个人是否尊重夏令时而另一个人不尊重?如果我执行someDateTimeOffset.UtcDateTime.ToLocalTme(),我的DateTime偏移量也会达到-6小时.

Jon*_*eet 8

根据以下文档TimeZoneInfo.BaseUtcOffset:

一个对象,指示当前时区的标准时间与协调世界时(UTC)之间的时差.

由于BaseUtcOffset是TimeZoneInfo对象的属性而不是TimeZoneInfo.AdjustmentRule对象的属性,因此TimeZoneInfo类将UTC的单个偏移应用于所有时区的调整.

DateTimeOffset.Now.Offset返回本地时区当前时间与UTC 之间的差异.不是当前时区的标准时间.中央时间正在观察此时的夏令时,因此存在差异.

如果您想在以下任何特定时间获得偏移量,该文档还为您提供了有关使用内容的指导TimeZoneInfo:

BaseUtcOffset属性返回UTC与时区标准时间之间的差异; 该GetUtcOffset方法返回UTC与特定时间点的时区之间的差异.

如果我执行someDateTimeOffset.UtcDateTime.ToLocalTme(),我的DateTime偏移量也会达到-6小时.

那将取决于具体的价值someDateTimeOffset.例如,如果是在冬季,你肯定会看到6小时的偏移.