이 문서는 이 API에 대한 참조 설명서를 보충하는 추가 설명을 제공합니다.
메서드를 ToBinary 사용하여 현재 DateTime 개체의 값을 이진 값으로 변환합니다. 이후에는 이진 값과 메서드를 FromBinary 사용하여 원래 DateTime 개체를 다시 만듭니다.
중요합니다
경우에 따라 DateTime 메서드에서 반환된 FromBinary 값이 DateTime 메서드에 제공된 원래 ToBinary 값과 동일하지 않을 수 있습니다. 자세한 내용은 다음 섹션인 "현지 시간 조정"을 참조하세요.
구조체는 지정된 시간 값이 현지 시간, UTC(협정 세계시)를 기반으로 하는지 여부를 나타내는 개인 DateTime 필드와, 날짜와 시간을 나타내는 100나노초 틱 수를 포함하는 프라이빗 Kind 필드로 구성됩니다.
현지 시간 조정
현지 시간은 현지 표준 시간대로 조정된 협정 세계시로, DateTime 속성이 Kind인 Local 구조체로 나타납니다. 메서드에서 생성 DateTime 되는 이진 표현에서 로컬 ToBinary 값을 복원하는 경우 메서드 FromBinary 는 원래 값과 같지 않도록 다시 만든 값을 조정할 수 있습니다. 이 문제는 다음과 같은 조건에서 발생할 수 있습니다.
로컬 DateTime 개체가 ToBinary 메서드에 의해 한 표준 시간대에서 직렬화되었다가, FromBinary 메서드에 의해 다른 표준 시간대에서 역직렬화되면, 결과 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($"{localDate} is an invalid time in the {TimeZoneInfo.Local.StandardName} zone."); DateTime localDate2 = DateTime.FromBinary(binLocal); Console.WriteLine($"{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