DateTimeOffset.ToUnixTimeSeconds・FromUnixTimeSecondsメソッドは、日時の値をUNIX時間(UNIXタイムスタンプ)として使われるlong型(64ビット)の値に変換します。
UNIX時間はUTCでの時刻と定義されているため、ToUnixTimeSecondsではUTCに変換された上での値が返されます。 また、FromUnixTimeSecondsメソッドでこの値を変換すると、Offsetプロパティが+00:00
のDateTimeOffsetが返されます。 UNIX時間からDateTimeOffsetに変換した値を、さらにローカル時間として取得したい場合はToLocalTimeメソッドを使用することができます。
using System;
class Sample {
static void Main()
{
var dto = 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();
// UNIX時間からDateTimeOffsetへ変換する (オフセット値は+00:00になる)
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L));
// UNIX時間からDateTimeOffsetへ、さらにローカル時間に変換する
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds(1000000000L).ToLocalTime());
// 32ビット符号付き整数の最大値を変換する
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds((long)int.MaxValue));
Console.WriteLine(DateTimeOffset.FromUnixTimeSeconds((long)int.MaxValue).ToLocalTime());
}
}
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型に変換するを参照してください。