スケジュールを曜日、時間、分としてデータベースに保存しています。データが読み取られると、その日、時、分が次に発生するためのDateTime
オブジェクトが作成されますが、これをDST対応に変更する必要があります。必要に応じてデータベースを変更することができます。
DateTimeOffset
はUTCの日付/時刻とオフセットを格納していることを知っています。 このMSDNブログエントリ から、DateTimeOffset
を「夏時間の処理」に使用する必要があることもわかっています。
私が理解するのに苦労しているのは、まさにDateTimeOffset
が「夏時間でどのように機能するか」です。私の理解では、夏時間は政治的な決定であり、純粋に相殺することから推測することはできません。名前付きのタイムゾーンや国ではなく、オフセットのみを格納する場合、この構造がDSTに適しているとはどういうことでしょうか。
DateTimeOffset
自体は実際にはDSTに対応していませんが、TimeZoneInfo
は対応しています。 DateTimeOffset
は、固定された瞬間を表します-したがって、タイムゾーンに対応したものを介してtoDateTimeOffset
を取得します。言い換えれば、今英国でDateTimeOffset
を要求した場合、UTCから+1時間のオフセットを持つものになってしまいます。英国で12月にDateTimeOffset
を要求した場合、UTCから0時間のオフセットが発生することになります。
データベースを変更してオフセットを含める場合およびユーザーが選択したDateTimeOffset
(種類は「未指定」である必要があります)とそのタイムゾーンからDateTime
を作成します、それなら、DSTを考慮に入れて正しいオフセットが得られるはずです。
ただし、注意すべき点が1つあります。「2年後」に何かをスケジュールし、今すぐオフセットを決定した場合、そのオフセットmay将来的には正しくない-たとえば、政府が変更される可能性があります。 DSTが適用される場合、明らかにそれによってデータベースに格納されている内容が変わることはありません。