5

私は現在、UTC-6中部標準時ゾーンにいます。TimeZoneInfo.Local.BaseUtcOffsetは-6を返しますが、DateTimeOffset.Now.Offsetは-5を返します。これらがなぜ異なるのかについて私は途方に暮れており、これを説明するドキュメントを見つけることができません。1つは夏時間を尊重し、もう1つは夏時間を尊重しませんか?someDateTimeOffset.UtcDateTime.ToLocalTme()を実行すると、DateTimeオフセットも-6時間取得されます。

4

2 に答える 2

12

のドキュメントにTimeZoneInfo.BaseUtcOffsetよると:

現在のタイムゾーンの標準時と協定世界時(UTC)の時間差を示すオブジェクト。

BaseUtcOffsetはTimeZoneInfo.AdjustmentRuleオブジェクトではなくTimeZoneInfoオブジェクトのプロパティであるため、TimeZoneInfoクラスはUTCからの単一のオフセットをタイムゾーンのすべての調整に適用します。

一方、ローカルタイムゾーンの現在の時刻とUTCDateTimeOffset.Now.Offsetの差を返します。現在のタイムゾーンの標準時間ではありません。中部標準時は現在、夏時間を採用しているため、不一致があります。

ドキュメントには、特定の時間にTimeZoneInfo:からオフセットを取得する場合に使用するものについてのガイダンスも記載されています。

プロパティは、UTCとタイムゾーンの標準時のBaseUtcOffset差を返します。この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 に答える