DateTime.ToBinary メソッド

定義

現在の DateTime オブジェクトを 64 ビットのバイナリ値にシリアル化します。後で、この値を使って、DateTime オブジェクトを再構築できます。

public:
 long ToBinary();
public long ToBinary ();
member this.ToBinary : unit -> int64
Public Function ToBinary () As Long

戻り値

Int64

Kind プロパティおよび Ticks プロパティをエンコードする 64 ビットの符号付き整数。

注釈

メソッドを ToBinary 使用して、現在 DateTime のオブジェクトの値をバイナリ値に変換します。 その後、バイナリ値とメソッドを FromBinary 使用して、元 DateTime のオブジェクトを再作成します。

重要

場合によっては、DateTimeメソッドによってFromBinary返される値が、メソッドに指定されたToBinaryDateTimeの値と同じではありません。 詳細については、次のセクション「ローカル時刻の調整」を参照してください。

現地時刻の調整

ローカル時刻は、ローカル タイム ゾーンに合わせて調整された世界協定時刻であり、プロパティに値Localを持つKind構造体によってDateTime表されます。 メソッドによってToBinary生成されるバイナリ表現からローカルDateTime値を復元する場合、FromBinaryメソッドは再作成された値を元の値と等しくしないように調整できます。 これは、次のような条件で発生します。

  • ローカル DateTime オブジェクトがメソッドによって 1 つのタイム ゾーンでシリアル化され、メソッドによってToBinaryFromBinary別のタイム ゾーンで逆シリアル化された場合、結果DateTimeのオブジェクトによって表されるローカル時刻が 2 番目のタイム ゾーンに自動的に調整されます。

    たとえば、現地時刻の午後 3 時を表すオブジェクトがあると DateTime します。 米国太平洋タイム ゾーンで実行されているアプリケーションでは、このメソッドを ToBinary 使用してそのオブジェクトを DateTime バイナリ値に変換します。 米国東部タイム ゾーンで実行されている別のアプリケーションでは、このメソッドを FromBinary 使用してバイナリ値を新しい DateTime オブジェクトに変換します。 新しい DateTime オブジェクトの値は午後 6 時で、元の 3 P.M と同じ時点を表します。 が、東部タイム ゾーンの現地時刻に調整されます。

  • ローカル DateTime 値のバイナリ表現が、呼び出されるシステムのローカル タイム ゾーンで無効な時刻を FromBinary 表す場合は、有効になるように時刻が調整されます。

    たとえば、標準時から夏時間への切り替えは、2010 年 3 月 14 日の米国太平洋タイム ゾーンで、時刻が 1 時間進んだ午前 2 時から午前 3 時に発生します。 この時間間隔は無効な時間です。つまり、このタイム ゾーンに存在しない時間間隔です。 次の例は、この範囲内にある時刻がメソッドによってバイナリ値に変換され、メソッドによってToBinaryFromBinary復元されると、元の値が有効な時刻になるように調整されることを示しています。 この例に示すように、特定の日付と時刻の値をメソッドに渡 TimeZoneInfo.IsInvalidTime すことによって、変更の対象となる可能性があるかどうかを判断できます。

    using System;
    
    public class Example
    {
       public static void Main()
       {
          DateTime localDate = new DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local);
          long binLocal = localDate.ToBinary();
          if (TimeZoneInfo.Local.IsInvalidTime(localDate))
             Console.WriteLine("{0} is an invalid time in the {1} zone.",
                               localDate,
                               TimeZoneInfo.Local.StandardName);
    
          DateTime localDate2 = DateTime.FromBinary(binLocal);
          Console.WriteLine("{0} = {1}: {2}",
                            localDate, localDate2, localDate.Equals(localDate2));
       }
    }
    // The example displays the following output:
    //    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
    //    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False
    
    open System
    
    let localDate = DateTime(2010, 3, 14, 2, 30, 0, DateTimeKind.Local)
    let binLocal = localDate.ToBinary()
    if TimeZoneInfo.Local.IsInvalidTime localDate then
        printfn $"{localDate} is an invalid time in the {TimeZoneInfo.Local.StandardName} zone."
    
    let localDate2 = DateTime.FromBinary binLocal
    printfn $"{localDate} = {localDate2}: {localDate.Equals localDate2}"
    
    // The example displays the following output:
    //    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
    //    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False
    
    Module Example
       Public Sub Main()
          Dim localDate As Date = DateTime.SpecifyKind(#03/14/2010 2:30AM#, DateTimeKind.Local)
          Dim binLocal As Long = localDate.ToBinary()
          If TimeZoneInfo.Local.IsInvalidTime(localDate) Then
             Console.WriteLine("{0} is an invalid time in the {1} zone.", _
                               localDate, _
                               TimeZoneInfo.Local.StandardName)
          End If
          Dim localDate2 As Date = DateTime.FromBinary(binLocal)
          Console.WriteLine("{0} = {1}: {2}", _
                            localDate, localDate2, localDate.Equals(localDate2))
       End Sub
    End Module
    ' The example displays the following output:
    '    3/14/2010 2:30:00 AM is an invalid time in the Pacific Standard Time zone.
    '    3/14/2010 2:30:00 AM = 3/14/2010 3:30:00 AM: False
    

バージョンに関する考慮事項

.NET Framework バージョン 2.0 以降では、DateTime構造体はプライベート Kind フィールドで構成されます。このフィールドは、指定された時刻の値が現地時刻、世界協定時刻 (UTC)、またはどちらも基にしていないかどうかを示し、プライベート Ticks フィールドには、日付と時刻を指定する 100 ナノ秒のティック数が含まれます。 Ticks フィールドにはプロパティを Ticks 使用してアクセスでき、Kind フィールドにはプロパティを使用して Kind アクセスできます。

.NET Framework 2.0 より前のバージョンでは、シリアル化インターフェイスをSystem.Runtime.Serialization.ISerializable使用する代わりにオブジェクトを手動でシリアル化したDateTime場合は、構造体内DateTimeの Ticks データのみをシリアル化する必要があります。 バージョン 2.0 以降では、Kind データもシリアル化する必要があります。

適用対象

こちらもご覧ください