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