DateTimeには、時刻がローカル時刻とUTCのどちらを表すのかを判別するためのプロパティKindが用意されています。
DateTime.Kindに設定される値とその意味は次のようになります。
DateTimeKind | 意味 |
---|---|
DateTimeKind.Local | DateTimeの時刻はローカル時刻を表す |
DateTimeKind.Utc | DateTimeの時刻はUTCでの時刻を表す |
DateTimeKind.Unspecified | 時刻の種類が特に指定されていない、あるいはどちらでもない |
DateTimeで時刻の変換を行う際にはこのプロパティの値が参照され、例えばローカル時刻またはUTCへの変換を行うToUniversalTime・ToLocalTimeメソッドでは、このKindプロパティの値に応じて適切な時刻に値が変換されます。
DateTimeのコンストラクタでは、時刻がローカル時刻・UTCのどちらを表すのか明示するためにDateTimeKindを指定することが出来ます。 また、DateTime.Nowプロパティで取得できる現在日時はDateTimeKind.Local、DateTime.UtcNowプロパティではDateTimeKind.Utcとなります。
DateTimeKindを指定してDateTimeインスタンスを作成する
using System;
class Sample {
static void Main()
{
var a = new DateTime(2013, 4, 1, 15, 0, 30, 123); // 日時の種類を指定しない
var b = new DateTime(2013, 4, 1, 15, 0, 30, 123, DateTimeKind.Local); // ローカル時刻として日時を指定
var c = new DateTime(2013, 4, 1, 15, 0, 30, 123, DateTimeKind.Utc); // UTCとして日時を指定
var d = DateTime.Now; // ローカル時刻での現在日時を取得
var e = DateTime.UtcNow; // UTCでの現在日時を取得
foreach (var dt in new[] {a, b, c, d, e}) {
Console.WriteLine("{0} {1}", dt, dt.Kind);
}
}
}
実行結果例
2013/04/01 15:00:30 Unspecified 2013/04/01 15:00:30 Local 2013/04/01 15:00:30 Utc 2013/04/01 15:30:05 Local 2013/04/01 6:30:05 Utc