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

时间:2012-09-20 20:10:28

标签: c# datetime

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

1 个答案:

答案 0 :(得分:8)

根据the documentation for 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小时的偏移。