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