DateTimeOffsetでも、DateTimeの場合と同様にToLocalTime・ToUniversalTimeメソッドで時刻を変換することができます。 さらに、ToOffsetメソッドで任意のオフセット値に変更した時刻に変換することも出来ます。
ToLocalTimeメソッドが返すDateTimeOffsetのOffsetプロパティは当然ローカル時刻のオフセット値と同じになります。 同様にToUniversalTimeはOffsetが 00:00:00 のDateTimeOffsetを返し、ToOffsetは指定したオフセット値が設定されたDateTimeOffsetを返します。
以下の例は、オフセット値が異なる日時のDateTimeOffsetに対してToLocalTime・ToUniversalTime・ToOffsetの各メソッドを呼び出した結果の違いを表示するものです。 なお、実行結果はタイムゾーンにUTC+9(日本標準時)が設定されている環境でのものです。
DateTimeOffset.ToLocalTime/ToUniversalTime/ToOffsetメソッドでローカル時刻・UTC・指定したオフセット値に変換されたDateTimeOffsetを取得する
Imports System
Class Sample
Shared Sub Main()
Dim a As New DateTimeOffset(2013, 4, 1, 15, 0, 30, 123, new TimeSpan(+9, 0, 0))
Dim b As New DateTimeOffset(2013, 4, 1, 15, 0, 30, 123, new TimeSpan(-5, 0, 0))
Dim c As New DateTimeOffset(2013, 4, 1, 15, 0, 30, 123, TimeSpan.Zero)
Console.WriteLine("[ToLocalTime]")
For Each dto As DateTimeOffset In New DateTimeOffset() {a, b, c}
Dim local As DateTimeOffset = dto.ToLocalTime() ' 時刻をローカル時刻に変換
Console.WriteLine("{0} -> {1}", dto, local)
Next
Console.WriteLine()
Console.WriteLine("[ToUniversalTime]")
For Each dto As DateTimeOffset In New DateTimeOffset() {a, b, c}
Dim utc As DateTimeOffset = dto.ToUniversalTime()
Console.WriteLine("{0} -> {1}", dto, utc) ' 時刻をUTCに変換
Next
Console.WriteLine()
Console.WriteLine("[ToOffset]")
For Each dto As DateTimeOffset In New DateTimeOffset() {a, b, c}
Dim est As DateTimeOffset = dto.ToOffset(new TimeSpan(-5, 0, 0)) ' 時刻をUTC-5(EST、東部標準時)に変換
Console.WriteLine("{0} -> {1}", dto, est)
Next
End Sub
End Class
UTC+9での実行結果
[ToLocalTime] 2013/04/01 15:00:30 +09:00 -> 2013/04/01 15:00:30 +09:00 2013/04/01 15:00:30 -05:00 -> 2013/04/02 5:00:30 +09:00 2013/04/01 15:00:30 +00:00 -> 2013/04/02 0:00:30 +09:00 [ToUniversalTime] 2013/04/01 15:00:30 +09:00 -> 2013/04/01 6:00:30 +00:00 2013/04/01 15:00:30 -05:00 -> 2013/04/01 20:00:30 +00:00 2013/04/01 15:00:30 +00:00 -> 2013/04/01 15:00:30 +00:00 [ToOffset] 2013/04/01 15:00:30 +09:00 -> 2013/04/01 1:00:30 -05:00 2013/04/01 15:00:30 -05:00 -> 2013/04/01 15:00:30 -05:00 2013/04/01 15:00:30 +00:00 -> 2013/04/01 10:00:30 -05:00
ToLocalTimeメソッドでは、実行環境に設定されているタイムゾーンに従って夏時間等の時間調整を考慮した変換が行われます。 一方、ToOffsetメソッドでは、単に指定されたオフセット値への変換のみが行われ、夏時間等の考慮はされません。 夏時間等の調整が必要なタイムゾーンへの変換を行う場合は、TimeZoneInfo.ConvertTimeメソッドを使う必要があります。