DateTimeには、時刻がローカル時刻とUTCのどちらを表すのかを判別するためのプロパティKindが用意されています。

DateTime.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

MENTAにてテキストチャットによるサポートを行っています。 問題の解決法をお探しの方や.NET/C#を学習中の方はどうぞご利用ください。