DateTimeOffset.ToUnixTimeSeconds・FromUnixTimeSecondsメソッドは、日時の値をUNIX時間(UNIXタイムスタンプ)として使われるlong型(64ビット)の値に変換します。
UNIX時間はUTCでの時刻と定義されているため、ToUnixTimeSecondsではUTCに変換された上での値が返されます。 また、FromUnixTimeSecondsメソッドでこの値を変換すると、Offsetプロパティが+00:00
のDateTimeOffsetが返されます。 UNIX時間からDateTimeOffsetに変換した値を、さらにローカル時間として取得したい場合はToLocalTimeメソッドを使用することができます。
Imports System
Class Sample
Shared Sub Main()
Dim dto As New DateTimeOffset(2009, 02, 13, 23, 31, 30, New TimeSpan(+00, 00, 00))
' DateTimeOffsetからUNIX時間へ変換する
Console.WriteLine(dto.ToUnixTimeSeconds())
' 2038-01-19T03:14:07+00:00をUNIX時間に変換する
Console.WriteLine((New DateTimeOffset(2038, 01, 19, 03, 14, 07, New TimeSpan(+00, 00, 00))).ToUnixTimeSeconds())
' 2038-01-19T12:14:07+09:00をUNIX時間に変換する
Console.WriteLine((New DateTimeOffset(2038, 01, 19, 12, 14, 07, New TimeSpan(+09, 00, 00))).ToUnixTimeSeconds())
Console.WriteLine()
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L).ToLocalTime());
' UNIX時間からDateTimeOffsetへ変換する (オフセット値は+00:00になる)
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L))
' UNIX時間からDateTimeOffsetへ、さらにローカル時間に変換する
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L).ToLocalTime())
' 32ビット符号付き整数の最大値を変換する
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(CLng(Integer.MaxValue)))
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(CLng(Integer.MaxValue)).ToLocalTime())
End Sub
End Class
1234567890 2147483647 2147483647 2001/09/09 1:46:40 +00:00 2001/09/09 10:46:40 +09:00 2038/01/19 3:14:07 +00:00 2038/01/19 12:14:07 +09:00
ToUnixTimeSeconds/FromUnixTimeSecondsでは、unix epoch(UTCでの1970年01月01日 午前00時00分00秒)からの経過秒数をUNIX時間とした変換を行います。 unix epochからの経過ミリ秒数(ミリ秒単位の精度)で変換を行いたい場合は、ToUnixTimeMilliseconds/FromUnixTimeMillisecondsメソッドを使用することができます。
UNIX時間で表現できる最小(最古)の日時は1970年01月01日 00:00:00(UTC)でありDateTimeで扱える範囲よりも狭いため、その範囲を越える値を変換しようとした場合はArgumentOutOfRangeExceptionがスローされます。 一方このメソッドは64ビットのUNIX時間を扱えるため、32ビットのUNIX時間の上限である2038年以降の日時も変換することができます。
DateTimeにはUNIX時間との相互変換を行うメソッドは用意されていません。 また、ここで挙げたUNIX時間との相互変換を行うメソッドは.NET Framework 4.6以降でサポートされているため、それより前のバージョンでは使用することはできません。 UNIX時間との相互変換、特にDateTimeを使って実装する方法についてはUNIX時間をDateTime型に変換するを参照してください。