2008年10月22日水曜日

DateTimeと時差情報

DateTime構造体は2.0からKind情報を持つようになり、UTCとローカル時間を区別できるようになりました。これによってどんなことが起きるかというと…

DateTime now = DateTime.Now;
DateTime utcNow = now.ToUniversalTime();
Console.WriteLine( "now {0} utcNow", now == utcNow ? "==" : "!=" );
// => now != utcNow
ダメじゃん。epoch秒に慣れてる人は確実にはまりますね。
MSDNを読むと…あー書いてある書いてある
DateTime オブジェクトの計算および比較では、対象となる複数のオブジェクトが同じタイム ゾーンの時刻を表している場合にのみ、意味のある結果を得ることができます。
裏返せば、タイムゾーンが違ったら意味がない…。

この場合どうすればいいかというと、DateTimeOffset構造体を使うそうです。ただし、こちらは2.0SP1から。

0 件のコメント: