web-dev-qa-db-ja.com

DateTimeOffsetは夏時間をどのように処理しますか?

スケジュールを曜日、時間、分としてデータベースに保存しています。データが読み取られると、その日、時、分が次に発生するためのDateTimeオブジェクトが作成されますが、これをDST対応に変更する必要があります。必要に応じてデータベースを変更することができます。

DateTimeOffsetはUTCの日付/時刻とオフセットを格納していることを知っています。 このMSDNブログエントリ から、DateTimeOffsetを「夏時間の処理」に使用する必要があることもわかっています。

私が理解するのに苦労しているのは、まさにDateTimeOffsetが「夏時間でどのように機能するか」です。私の理解では、夏時間は政治的な決定であり、純粋に相殺することから推測することはできません。名前付きのタイムゾーンや国ではなく、オフセットのみを格納する場合、この構造がDSTに適しているとはどういうことでしょうか。

23
Stephen Kennedy

DateTimeOffset自体は実際にはDSTに対応していませんが、TimeZoneInfoは対応しています。 DateTimeOffsetは、固定された瞬間を表します-したがって、タイムゾーンに対応したものを介してtoDateTimeOffsetを取得します。言い換えれば、今英国でDateTimeOffsetを要求した場合、UTCから+1時間のオフセットを持つものになってしまいます。英国で12月にDateTimeOffsetを要求した場合、UTCから0時間のオフセットが発生することになります。

データベースを変更してオフセットを含める場合およびユーザーが選択したDateTimeOffset(種類は「未指定」である必要があります)とそのタイムゾーンからDateTimeを作成します、それなら、DSTを考慮に入れて正しいオフセットが得られるはずです。

ただし、注意すべき点が1つあります。「2年後」に何かをスケジュールし、今すぐオフセットを決定した場合、そのオフセットmay将来的には正しくない-たとえば、政府が変更される可能性があります。 DSTが適用される場合、明らかにそれによってデータベースに格納されている内容が変わることはありません。

28
Jon Skeet