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インスタンスを作成する
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