2012-04-20 6 views
9

falseを返します。DateTime.Ticks、DateTime.Equalsとタイムゾーン

DateTime d = DateTime.Now; 
d.Ticks == d.ToUniversalTime().Ticks; // false 

私は日時のダニは、UTC時間に基づいてされることを期待したいです。 DateTime.Ticks上のMSDNのページには言及し

は、このプロパティの値はDateTime.MinValueを表し午前12時00分00秒真夜中、1月1日、0001、から経過した100ナノ秒間隔の数を表していると言います。うるう秒に起因するダニの数は含まれません。

真夜中1月1日、0001 ..どのタイムゾーン?

なぜDateTime.Ticksはタイムゾーンに依存しますか?

私は次のコードでも偽

DateTime d = DateTime.Now; 
d == d.ToUniversalTime(); // false 

を返す理由ダニが異なっているという事実がDateTime.Equals上のMSDNドキュメントは、そのダニプロパティ場合

T1とT2が等しい言及されていることを推測します値は等しい。そのKindプロパティ値は、テストでは等価であるとはみなされません。

私の期待は、タイムゾーンに関係なく、DateTime.Ticksは等しいと考えました。

私は、彼らが起こったタイムゾーンに関係なく、2つの瞬間が等しいと思います。私の期待は間違っていますか?

+1

メモDateTimeOffset(http://msdn.microsoft.com/en-us/library/system.datetimeoffset.op_equality.aspx)は、2つのインスタンスを比較するときの瞬間を比較することができます。 –

+0

@ChrisShafferおかげさまで、これは私が探しているのは正確な瞬間であり、実際の "日付"ではないので、私はこれを使うべきだと思います。 – GuiSim

答えて

9

ソース:http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/fde7e5b0-e2b9-4d3b-8a63-c2ae75e316d8

DateTime.Ticksが "12時00分00秒真夜中、0001年1月1日から経過した100ナノ秒間隔 の数" と記載されています。つまり、 現地時間1月1日です。DateTimeをUTCに変換した場合、Ticks は、 の経過時間が100 UTCの12:00:00深夜から100ナノ秒の間隔になります。潜在的に異なる 現地時間1月1日、2つのティックの値は と異なるでしょう。

0

DateTime.Nowは、タイムゾーンのオフセットに基づいて決定されます。つまり、オフセットがゼロでない限り、世界時と同じではありません。 DateTime.Nowを2つの異なるタイムゾーンのティックに変換して同じ結果を得るのは意味がありません - 同じ絶対時間(UTC)ですが、同じ相対時間ではありません(タイムゾーンオフセットを使用)。

1

現在の日時(ある特定のタイムゾーン - GMTに住んでいない場合)は、UTC時間からx時間だけオフセットされているため、DateTime.Nowはあなたを午前4時に置くことがありますが、Datetime.Now.ToUniversalTimeあなたの現在のタイムゾーンに応じて、午後11時に。

ダニは世界時に後あなたのタイムゾーンから変換を計算するので、あなたは、GMTタイムゾーンに住んでいれば、彼らは等しくなるはずである唯一の時間があるされています。

より簡単に言うと、2011年1月1日午前8:00の間のティック数は、2011年1月1日の午後11:00以降のティック数と同じではありません。あなたのコードでは、日付は普遍的な日付に変換されており、式の右辺で目盛りを計算していますが、現地日を使って左辺に差をつけるだけです。したがって、それらはそれぞれです!= eachその他。

+0

私は時間と全く同じ瞬間を表しているので、2つが等しいと仮定します。私は基準の枠組みの変更が平等を変えるとは期待していなかった。 – GuiSim

+2

@GuiSim - その最初の行は私の答えにあってはならないはずです。私がそれを読んだとき、私は憂慮しているように聞こえました。申し訳ありません。私はそうではありませんでした。私は書面によるコミュニケーションにひどいです。 – David

関連する問題