ConvertTimeメソッドを使うと、DateTime・DateTimeOffsetの値を異なるタイムゾーンでの日時に変換することができます。

DateTimeOffset.Offsetメソッドではオフセット値の変更はできますが、この際、夏時間などタイムゾーン内での時間調整は一切行われません。 一方TimeZoneInfo.ConvertTimeメソッドでは、変換に際してそのタイムゾーン内での時刻の変換規則に基づいた時間調整が行われます。 DateTimeOffsetだけでなく、DateTimeに対しても同様に時間調整が行われます。

TimeZoneInfo.ConvertTimeメソッドでDateTime・DateTimeOffsetを他のタームゾーンでの日時に変換する
Imports System

Class Sample
  Shared Sub Main()
    ' 東部標準時のTimeZoneInfoを取得
    Dim est As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById("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} {2}", _
                      dtWinter, _
                      IIf(est.IsDaylightSavingTime(dtWinter), est.DaylightName, est.StandardName), _
                      TimeZoneInfo.ConvertTime(dtWinter, est))
    Console.WriteLine("{0} -> {1} {2}", _
                      dtSummer, _
                      IIf(est.IsDaylightSavingTime(dtSummer), est.DaylightName, est.StandardName), _
                      TimeZoneInfo.ConvertTime(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} {2}", _
                      dtoWinter, _
                      IIf(est.IsDaylightSavingTime(dtoWinter), est.DaylightName, est.StandardName), _
                      TimeZoneInfo.ConvertTime(dtoWinter, est))
    Console.WriteLine("{0} -> {1} {2}", _
                      dtoSummer, _
                      IIf(est.IsDaylightSavingTime(dtoSummer), est.DaylightName, est.StandardName), _
                      TimeZoneInfo.ConvertTime(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

あるタイムゾーンにて日時が夏時間の期間中かどうかを調べるには、IsDaylightSavingTimeメソッドが使えます。

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