DateTime オブジェクトには「Kind」変数があり、TimeZoneInfo がその処理方法を知るのに役立ちます。TimeZone.ConvertTimeのMSDN ドキュメントには、次のように記載されています。
DateTimeKind.Local、現地時間を destinationTimeZone の時間に変換します。
DateTimeKind.Utc、協定世界時 (UTC) を destinationTimeZone の時刻に変換します。
DateTimeKind.Unspecified、ローカルと見なされます。
例えば:
Console.WriteLine("Local time zone is '{0}'.", TimeZoneInfo.Local.Id);
var gmTime = new DateTime(2013, 03, 02, 01, 00, 00, DateTimeKind.Utc);
var localTime = new DateTime(2013, 03, 02, 01, 00, 00, DateTimeKind.Local);
var unspecifiedTime = new DateTime(2013, 03, 02, 01, 00, 00);
var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var gmTimeConverted = TimeZoneInfo.ConvertTime(gmTime, timeZone); // 03/02/2013 8:00:00AM
var localTimeConverted = TimeZoneInfo.ConvertTime(localTime, timeZone); // 03/02/2013
var unspecifiedTimeConverted = TimeZoneInfo.ConvertTime(unspecifiedTime, timeZone);
Console.WriteLine("Converting GMT to EST: {0}", gmTimeConverted);
Console.WriteLine("Converting Local to EST: {0}", localTimeConverted);
Console.WriteLine("Converting Unspecified to EST: {0}", unspecifiedTimeConverted);
結果:
ローカル タイム ゾーンは「太平洋標準時」です。
GMT から EST への変換: 3/1/2013 8:00:00 PM
ローカルから EST への変換: 2013 年 3 月 2 日 4:00:00 AM
Unspecified から EST への変換: 2013 年 3 月 2 日 4:00:00 AM
または、ローカル タイムゾーンが「東部標準時」の場合は、次の結果が得られます
ローカル タイム ゾーンは「東部標準時」です。
GMT から EST への変換: 3/1/2013 8:00:00 PM
ローカルから EST への変換: 2013 年 3 月 2 日 1:00:00 AM
Unspecified から EST への変換: 2013 年 3 月 2 日 1:00:00 AM
TimeZoneInfo で「Unspecified」を Utc のように扱いたい場合は、TimeZoneInfo.ConvertTimeFromUtc のように機能する必要があります。再びMSDNのドキュメントから
DateTimeKind.Local、ArgumentException をスローします。
DateTimeKind.Unspecified または DateTimeKind.Utc、協定世界時 (UTC) から変換します。