私は現在、UTC-6中部標準時ゾーンにいます。TimeZoneInfo.Local.BaseUtcOffsetは-6を返しますが、DateTimeOffset.Now.Offsetは-5を返します。これらがなぜ異なるのかについて私は途方に暮れており、これを説明するドキュメントを見つけることができません。1つは夏時間を尊重し、もう1つは夏時間を尊重しませんか?someDateTimeOffset.UtcDateTime.ToLocalTme()を実行すると、DateTimeオフセットも-6時間取得されます。
2 に答える
のドキュメントにTimeZoneInfo.BaseUtcOffset
よると:
現在のタイムゾーンの標準時と協定世界時(UTC)の時間差を示すオブジェクト。
と
BaseUtcOffsetはTimeZoneInfo.AdjustmentRuleオブジェクトではなくTimeZoneInfoオブジェクトのプロパティであるため、TimeZoneInfoクラスはUTCからの単一のオフセットをタイムゾーンのすべての調整に適用します。
一方、ローカルタイムゾーンの現在の時刻とUTCDateTimeOffset.Now.Offset
の差を返します。現在のタイムゾーンの標準時間ではありません。中部標準時は現在、夏時間を採用しているため、不一致があります。
ドキュメントには、特定の時間にTimeZoneInfo
:からオフセットを取得する場合に使用するものについてのガイダンスも記載されています。
プロパティは、UTCとタイムゾーンの標準時の
BaseUtcOffset
差を返します。このGetUtcOffset
メソッドは、UTCと特定の時点でのタイムゾーンの時刻との差を返します。someDateTimeOffset.UtcDateTime.ToLocalTme()を実行すると、DateTimeオフセットも-6時間取得されます。
まあそれは正確にどのような価値があるかに依存しますsomeDateTimeOffset
。たとえば、冬の場合は、6時間のオフセットが表示されます。
私は間違っているかもしれませんが、私は思います
DateTimeOffset.Now.Offset
夏時間を考慮しますが、他は考慮しません。