다음을 통해 공유


System.DateTime.ToBinary 및 FromBinary 메서드

이 문서에서는 이 API에 대한 참조 설명서에 대한 추가 설명서를 제공합니다.

메서드를 ToBinary 사용하여 현재 DateTime 개체의 값을 이진 값으로 변환합니다. 이후에는 이진 값과 메서드를 FromBinary 사용하여 원래 DateTime 개체를 다시 만듭니다.

Important

경우에 따라 메서드에서 DateTime 반환된 FromBinary 값이 메서드에 제공된 ToBinary 원래 DateTime 값과 동일하지 않습니다. 자세한 내용은 다음 섹션인 "현지 시간 조정"을 참조하세요.

구조체는 DateTime 지정된 시간 값이 현지 시간, UTC(협정 세계시)를 기반으로 하는지 또는 날짜와 시간을 지정하는 100나노초 틱 수를 포함하는 프라이빗 필드에 연결되지 않는지 여부를 나타내는 개인 KindTicks 필드로 구성됩니다.

현지 시간 조정

현지 표준 시간대로 조정된 협정 세계시인 현지 시간은 해당 속성에 값Local이 있는 DateTime 구조체 Kind 로 표시됩니다. 메서드에서 생성 ToBinary 되는 이진 표현에서 로컬 DateTime 값을 복원하는 경우 메서드 FromBinary 는 원래 값과 같지 않도록 다시 만든 값을 조정할 수 있습니다. 이 비동기화는 다음과 같은 경우에 발생할 수 있습니다.

  • 로컬 DateTime 개체가 메서드에 의해 한 표준 시간대로 직렬화된 다음 메서드에 의해 ToBinaryFromBinary 다른 표준 시간대에서 역직렬화되면 결과 DateTime 개체가 나타내는 현지 시간이 자동으로 두 번째 표준 시간대로 조정됩니다.

    예를 들어 오후 3시(현지 시간)를 나타내는 개체를 고려 DateTime 해 보세요. 미국 태평양 표준 시간대에서 실행되는 애플리케이션은 이 메서드를 사용하여 ToBinary 해당 개체를 이 DateTime 진 값으로 변환합니다. 미국에서 실행 되는 다른 애플리케이션 동부 표준 시간대를 사용 하 여는 FromBinary 새 이진 값으로 변환할 방법이 DateTime 개체입니다. 새 DateTime 개체의 값은 오후 6시로, 원래 오후 3시 값과 동일한 시점을 나타내지만 동부 표준 시간대의 현지 시간으로 조정됩니다.

  • 로컬 DateTime 값의 이진 표현이 호출되는 FromBinary 시스템의 현지 표준 시간대에서 잘못된 시간을 나타내는 경우 시간이 유효하게 조정됩니다.

    예를 들어 표준시에서 일광 절약 시간으로의 전환은 2010년 3월 14일 오전 2:00에 미국 태평양 표준 시간대에서 1시간이 지나면 오전 3:00까지 발생합니다. 이 시간 간격은 잘못된 시간, 즉 이 표준 시간대에 존재하지 않는 시간 간격입니다. 다음 예제에서는 이 범위 내에 있는 시간이 메서드에 의해 ToBinary 이진 값으로 변환된 다음 메서드에 의해 FromBinary 복원될 때 원래 값이 유효한 시간이 되도록 조정되는 것을 보여줍니다. 예제와 같이 특정 날짜 및 시간 값을 메서드에 전달 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