DateTime.FromBinary(Int64) メソッド

定義

64 ビットのバイナリ値を逆シリアル化し、元のシリアル化 DateTime オブジェクトを再構築します。

public:
 static DateTime FromBinary(long dateData);
public static DateTime FromBinary (long dateData);
static member FromBinary : int64 -> DateTime
Public Shared Function FromBinary (dateData As Long) As DateTime

パラメーター

dateData
Int64

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

戻り値

DateTime

DateTime メソッドによってシリアル化された ToBinary() オブジェクトと等価なオブジェクト。

例外

dateDataDateTime.MinValue より小さいか、 DateTime.MaxValue より大きい値です。

注釈

メソッドを 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 日午前 2 時に、時刻が 1 時間進む午前 3 時 00 分に、米国の太平洋タイム ゾーンで発生します。 この時間間隔は無効な時間です。つまり、このタイム ゾーンに存在しない時間間隔です。 次の例は、この範囲内にある時刻がメソッドによってバイナリ値に変換され、メソッドによって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 アクセスでき、Kind フィールドにはプロパティを使用して Kind アクセスできます。

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

適用対象

こちらもご覧ください