2011-07-20 25 views
4

DateTimeOffsetと夏時間について質問があります。夏時間変更後のDateTimeOffset表示

11/6/2010 10:15:00 AM 

私はこのコードを実行した場合::

DateTimeOffset myTime = DateTimeOffset.Now; 
Console.WriteLine("Local time: " + myTime.ToLocalTime().DateTime); 

をその後、私はこの結果を得る:

現地時間:私の質問を説明するには、今の日付と時間があることを前提としています11/6/2010 10:15:00 AM

午前10時15分にイベントが発生したことを意味する(私のタイムゾーンは山岳夏時間(-6オフセット)です)。

したがって、このDateTimeOffsetを(DateTimeOffsetとして)SQL Server 2008 dbに保存します。翌日、私はそれをユーザーに表示したい。しかし、今や夏時間の有効期限が切れています。

上記のWriteLineを(前日から)保存されたオフ値で実行すると、何が表示されますか?

データベースに格納されているオフセットは-6です。しかし、夏時間が終わったので、現在のオフセットは-7です。私はdocumentationを理解しているので、まずUTC時間に変換します(10:15 AMに6時間(午後4時15分)を追加します)。午後 - 。7 = 9:15)

だから私私の数学は今、私は私のイベントを表示するとき、それは9:15よりむしろ10:15で起こったことが示されます、右であれば

これはうまくいきません。タイムゾーンの情報を保存したいのですが、同じ時間帯に静かに滞在する必要があります(つまり、イベントがユタ州の午前10時15分に発生した場合は、それ(ユタ州)では、夏時間の変更があったかどうかに関係なく、午前10時15分になっていたことがわかります。

私はこの問題を抱える最初の人だとは思わない。これを解決するためにほかの人は何をしますか? (それとも私が間違っている事実がありますか?)

答えて

6

いいえ、それは現在オフセット追加しません - それはまだある-6その日でオフセットを追加します。したがって、の日付がであることがわかっているため、その日の有効なタイムゾーン規則は10:15 AMと表示されます。

ところで、簡単なUTC時刻とタイムゾーンIDを別々に保存することをお勧めします。タイムゾーンを保存している場合は、DateTimeOffsetを使用しても、UTCの日付/時刻には特に役立ちません。私は「もちろん

- (DateTimeは、あなたが簡単にあなたが表現しようとしているものを表現することはできません恐ろしく混乱しタイプである。一方で、それはそれ時に瞬間を表すをしていることを明確です)私の非常に偏った意見では、組み込みのものよりもはるかに明確な日付/時刻APIですが、実際には実用には向いていません。Noda Timeをご覧になることをお勧めします。 (私たちはそこに行っています...)

+0

合意 - あなたがタイムゾーンを把握している限り、DateTimeOffsetオブジェクトを格納することはあまり購入しません。ちょうどUTCを使用して、タイムゾーンIDをそれに格納してください。 – Doug

関連する問題