さらに、ConvertTimeBySystemTimeZoneIdメソッドを使えば、目的のタイムゾーンを表すTimeZoneInfoの取得を省略することが出来ます。 このメソッドは、FindSystemTimeZoneByIdメソッドとConvertTimeメソッドの組み合わせと同等であるため、呼び出しが1度であるならこちらのメソッドを使った方が記述が少なくなります。
TimeZoneInfo.ConvertTimeBySystemTimeZoneIdメソッドでDateTime・DateTimeOffsetを他のタームゾーンでの日時に変換する
Imports System
Class Sample
Shared Sub Main()
' 東部標準時のID
Const est As String = "Eastern Standard Time"
' ローカルでの冬期・夏期の日付 (DateTime)
Dim dtWinter As New DateTime(2013, 1, 1, 12, 0, 0, DateTimeKind.Local)
Dim dtSummer As 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)
Dim dtoWinter As New DateTimeOffset(2013, 1, 1, 12, 0, 0, TimeZoneInfo.Local.BaseUtcOffset)
Dim dtoSummer As 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))
End Sub
End Class
日本標準時が設定されている環境での実行結果
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