ToBinaryFromBinaryメソッドは、日時の値をlong型(64ビット)の値に変換します。 このメソッドでは、DateTime.TicksプロパティおよびDateTime.Kindプロパティの値を64ビットのバイナリ値として格納したフォーマットが用いられます。 そのため、日時をバイナリデータとして保存・復元したい場合にはこのメソッドを使うことが出来ます。

DateTime.ToBinary/FromBinaryメソッドで日時⇄64ビットバイナリ値の変換をする
using System;

class Sample {
  static void Main()
  {
    DateTime dt = DateTime.Now; // ローカル時刻
    long binary = dt.ToBinary();

    Console.WriteLine("{0:o} -> {1:x16}", dt, binary);
    Console.WriteLine("{0:x16} -> {1:o}", binary, DateTime.FromBinary(binary));
    Console.WriteLine();

    dt = DateTime.UtcNow; // UTC
    binary = dt.ToBinary();

    Console.WriteLine("{0:o} -> {1:x16}", dt, binary);
    Console.WriteLine("{0:x16} -> {1:o}", binary, DateTime.FromBinary(binary));
  }
}
実行結果例
2013-04-01T15:00:30.1230000+09:00 -> 88cffcb5595f57b0
88cffcb5595f57b0 -> 2013-04-01T15:00:30.1230000+09:00

2013-04-01T06:00:30.1230000Z -> 48cffcb5595f57b0
48cffcb5595f57b0 -> 2013-04-01T06:00:30.1230000Z

DateTimeOffsetにはToBinary・FromBinaryメソッドは用意されていません。 DateTimeOffsetのバイナリ表現が必要な場合は、DateTimeOffset.TicksプロパティおよびDateTimeOffset.Offsetプロパティの値をそれぞれ変換・復元します。

ローカル時刻(KindプロパティがDateTimeKind.Local)のDateTimeをToBinaryメソッドで変換し、その値を変換時とは異なるタイムゾーンの環境で復元する場合、復元する環境のタイムゾーンでのローカル時刻として復元される点に注意が必要です。 これを避けるには、あらかじめ日時をUTCに変換しておく必要があります。