5

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

4

2 回答 2

12

根据以下文档TimeZoneInfo.BaseUtcOffset

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

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

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

如果您想在任何特定时间从 a 获取偏移量,该文档还为您提供了有关使用什么的指导TimeZoneInfo

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

如果我执行 someDateTimeOffset.UtcDateTime.ToLocalTme(),我也会得到一个 DateTime 偏移量 -6 小时。

那么这将取决于究竟有什么价值someDateTimeOffset。例如,如果是在冬季,您肯定会看到 6 小时的偏移量。

于 2012-09-20T20:19:32.157 回答
1

我可能是错的,但我认为

DateTimeOffset.Now.Offset

考虑到夏令时,而另一个则不考虑。

于 2012-09-20T20:15:39.697 回答