DateTimeOffset.ToUnixTimeSecondsFromUnixTimeSecondsメソッドは、日時の値をUNIX時間(UNIXタイムスタンプ)として使われるlong型(64ビット)の値に変換します。

UNIX時間はUTCでの時刻と定義されているため、ToUnixTimeSecondsではUTCに変換された上での値が返されます。 また、FromUnixTimeSecondsメソッドでこの値を変換すると、Offsetプロパティが+00:00のDateTimeOffsetが返されます。 UNIX時間からDateTimeOffsetに変換した値を、さらにローカル時間として取得したい場合はToLocalTimeメソッドを使用することができます。

DateTimeOffset.ToUnixTimeSeconds/FromUnixTimeSecondsメソッドで日時⇄UNIX時間の変換をする
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型に変換するを参照してください。