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インスタンスを作成する
Imports System
Class Sample
Shared Sub Main()
Dim a As New DateTime(2013, 4, 1, 15, 0, 30, 123) ' 日時の種類を指定しない
Dim b As New DateTime(2013, 4, 1, 15, 0, 30, 123, DateTimeKind.Local) ' ローカル時刻として日時を指定
Dim c As New DateTime(2013, 4, 1, 15, 0, 30, 123, DateTimeKind.Utc) ' UTCとして日時を指定
Dim d As DateTime = DateTime.Now ' ローカル時刻での現在日時を取得
Dim e As DateTime = DateTime.UtcNow ' UTCでの現在日時を取得
For Each dt As DateTime In New DateTime() {a, b, c, d, e}
Console.WriteLine("{0} {1}", dt, dt.Kind)
Next
End Sub
End Class
実行結果例
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