ToBinary・FromBinaryメソッドは、日時の値をlong型(64ビット)の値に変換します。 このメソッドでは、DateTime.TicksプロパティおよびDateTime.Kindプロパティの値を64ビットのバイナリ値として格納したフォーマットが用いられます。 そのため、日時をバイナリデータとして保存・復元したい場合にはこのメソッドを使うことが出来ます。
DateTime.ToBinary/FromBinaryメソッドで日時⇄64ビットバイナリ値の変換をする
using System;
class Sample {
static void Main()
{
var dt = DateTime.Now; // ローカル時刻
var 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に変換しておく必要があります。