ToFileTimeFromFileTimeメソッドは、日時の値をWindowsのファイルタイムスタンプで使われるlong型(64ビット)の値に変換します。

タイムスタンプはUTCでの時刻とされているため、ToFileTimeメソッドではUTCに変換された上での値が返されます。 FromFileTimeメソッドでこの値を変換すると、UTCからローカル時刻に変換された(KindプロパティがDateTimeKind.Localの)DateTimeが返されます。 一方、FromFileTimeUtcメソッドで変換すると、UTC(KindプロパティがDateTimeKind.Utc)のDateTimeが返されます。

DateTimeOffset.FromFileTimeメソッドでは、返されるDateTimeOffsetのOffsetプロパティには常にローカル時刻のオフセットが設定されます。

DateTime.ToFileTime/FromFileTimeメソッドで日時⇄ファイルタイムスタンプ値の変換をする
using System;

class Sample {
  static void Main()
  {
    var dt = DateTime.Now;
    long ts = dt.ToFileTime(); // DateTimeをファイルタイムスタンプの値に変換

    Console.WriteLine("{0:o} -> {1}", dt, ts);
    Console.WriteLine("{0} -> {1:o}", ts, DateTime.FromFileTime(ts));     // ファイルタイムスタンプの値をローカル時刻のDateTimeに変換
    Console.WriteLine("{0} -> {1:o}", ts, DateTime.FromFileTimeUtc(ts));  // ファイルタイムスタンプの値をUTCのDateTimeに変換
    Console.WriteLine();

    var dto = DateTimeOffset.Now;
    ts = dto.ToFileTime(); // DateTimeOffsetをファイルタイムスタンプの値に変換

    Console.WriteLine("{0} -> {1}", dto, ts);
    Console.WriteLine("{0} -> {1}", ts, DateTimeOffset.FromFileTime(ts)); // ファイルタイムスタンプの値をDateTimeOffsetに変換
  }
}
実行結果例
2013-04-01T15:00:30.1230000+09:00 -> 130092696301230000
130092696301230000 -> 2013-04-01T15:00:30.1230000+09:00
130092696301230000 -> 2013-04-01T06:00:30.1230000Z

2013/04/01 15:00:30 +09:00 -> 130092696301230000
130092696301230000 -> 2013/04/01 15:00:30 +09:00

なお、File.SetLastWriteTimeなどFileクラスのタイムスタンプを設定・取得を行うメソッドでは、引数の型がDateTimeとなっています。 そのため、これらのメソッドを使ってタイムスタンプを変更する場合は、わざわざToFileTime・FromFileTimeメソッドを使って値の変換を必要はありません。

ファイルタイムスタンプで表現できる最小(最古)の日時は1601年01月01日 00:00:00(UTC)でありDateTimeで扱える範囲よりも狭いため、その範囲を越える値を変換しようとした場合はArgumentOutOfRangeExceptionがスローされます。