さらに、ConvertTimeBySystemTimeZoneIdメソッドを使えば、目的のタイムゾーンを表すTimeZoneInfoの取得を省略することが出来ます。 このメソッドは、FindSystemTimeZoneByIdメソッドとConvertTimeメソッドの組み合わせと同等であるため、呼び出しが1度であるならこちらのメソッドを使った方が記述が少なくなります。
TimeZoneInfo.ConvertTimeBySystemTimeZoneIdメソッドでDateTime・DateTimeOffsetを他のタームゾーンでの日時に変換する
using System;
class Sample {
static void Main()
{
// 東部標準時のID
const string est = "Eastern Standard Time";
// ローカルでの冬期・夏期の日付 (DateTime)
var dtWinter = new DateTime(2013, 1, 1, 12, 0, 0, DateTimeKind.Local);
var dtSummer = new DateTime(2013, 7, 1, 12, 0, 0, DateTimeKind.Local);
Console.WriteLine("{0} -> {1}",
dtWinter,
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dtWinter, est));
Console.WriteLine("{0} -> {1}",
dtSummer,
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dtSummer, est));
Console.WriteLine();
// ローカルでの冬期・夏期の日付 (DateTimeOffset)
var dtoWinter = new DateTimeOffset(2013, 1, 1, 12, 0, 0, TimeZoneInfo.Local.BaseUtcOffset);
var dtoSummer = new DateTimeOffset(2013, 7, 1, 12, 0, 0, TimeZoneInfo.Local.BaseUtcOffset);
Console.WriteLine("{0} -> {1}",
dtoWinter,
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dtoWinter, est));
Console.WriteLine("{0} -> {1}",
dtoSummer,
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dtoSummer, est));
}
}
日本標準時が設定されている環境での実行結果
2013/01/01 12:00:00 -> 2012/12/31 22:00:00 2013/07/01 12:00:00 -> 2013/06/30 23:00:00 2013/01/01 12:00:00 +09:00 -> 2012/12/31 22:00:00 -05:00 2013/07/01 12:00:00 +09:00 -> 2013/06/30 23:00:00 -04:00