DateTimeOffsetでは、時刻は常にいずれかのタイムゾーンでの時刻を表す(UTCからの時差を持つ)ものとして扱われるため、時刻の種類という概念はありません。 そのかわり、タイムゾーンに対応するオフセット値を表すプロパティOffsetが用意されています。
このプロパティはUTCからの時差をTimeSpanとして表し、例えばDateTimeOffsetの表す日時がUTCの場合、Offsetプロパティの値は +00:00:00 (TimeSpan.Zero)になります。 また、実行環境の時刻が日本標準時(UTC+9)に設定されている環境の場合、DateTimeOffset.NowプロパティはOffsetに +09:00:00 が設定された値を返します。
なお、DateTimeOffset.DateTimeプロパティを参照すると、DateTimeOffsetからオフセット値部分を除いて日時部分だけにしたDateTimeを取得できます。 このプロパティで取得できるDateTimeのKindプロパティの値は、DateTimeKind.Unspecifiedとなります。
オフセット値を指定してDateTimeOffsetインスタンスを作成する
Imports System
Class Sample
Shared Sub Main()
Dim dt As New DateTime(2013, 4, 1, 15, 0, 30, 123)
Dim a As New DateTimeOffset(dt, TimeSpan.Zero) ' UTC+0の日時を指定
Dim b As New DateTimeOffset(dt, new TimeSpan(-5, 0, 0)) ' UTC-5(東部標準時)の日時を指定
Dim c As New DateTimeOffset(dt, new TimeSpan(+9, 0, 0)) ' UTC+9(日本標準時)の日時を指定
Dim d As DateTimeOffset = DateTimeOffset.Now ' ローカル時刻での現在日時を取得
Dim e As DateTimeOffset = DateTimeOffset.UtcNow ' UTCでの現在日時を取得
For Each dto As DateTimeOffset In New DateTimeOffset() {a, b, c, d, e}
Console.WriteLine("{0}, {1}", dto.DateTime, dto.Offset)
Next
End Sub
End Class
実行結果例
2013/04/01 15:00:30, 00:00:00 2013/04/01 15:00:30, -05:00:00 2013/04/01 15:00:30, 09:00:00 2013/04/01 15:30:05, 09:00:00 2013/04/01 6:30:05, 00:00:00