Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# DateTime.FromBinary() 메서드 완벽 정리: 64비트 이진 값으로 DateTime 객체 복원하기

C#의 DateTime.FromBinary() 메서드는 64비트 이진(binary) 값을 역직렬화(deserialize)하여 원래 직렬화되었던 DateTime 객체를 그대로 재생성하는 데 사용됩니다. 주로 날짜와 시간 데이터를 파일이나 네트워크를 통해 저장·전송한 후 다시 불러올 때 활용됩니다.

구문(Syntax)

DateTime.FromBinary() 메서드의 기본 구문은 다음과 같습니다.

public static DateTime FromBinary(long val);

여기서 매개변수 val은 64비트 부호 있는 정수(signed integer)로, 하위 2비트 필드에는 Kind 속성(현지 시간, UTC, 미지정 여부)이 인코딩되고, 나머지 62비트 필드에는 Ticks 속성(날짜와 시간을 나타내는 틱 값)이 인코딩되어 있습니다.

예제 1: ToBinary()로 직렬화한 값 복원하기

다음은 DateTime.FromBinary() 메서드를 실제로 구현한 첫 번째 예제입니다.

using System;
public class Demo {
    public static void Main() {
        DateTime d1 = new DateTime(2019, 11, 10, 6, 20, 45);
        long val = d1.ToBinary();
        DateTime d2 = DateTime.FromBinary(val);
        System.Console.WriteLine("Initial DateTime = {0:y} {0:dd} ", d1);
        System.Console.WriteLine("\nNew DateTime = {0:y} {0:dd} ", d2);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Initial DateTime = November 2019 10
New DateTime = November 2019 10

이 예제에서는 먼저 ToBinary() 메서드로 DateTime 객체를 64비트 정수로 직렬화한 뒤, FromBinary() 메서드를 통해 동일한 날짜와 시간을 가진 새로운 DateTime 객체를 성공적으로 복원했음을 확인할 수 있습니다.

예제 2: 임의의 이진 값으로 DateTime 생성하기

이번에는 특정 숫자 값을 직접 전달하여 DateTime.FromBinary() 메서드를 구현하는 두 번째 예제입니다.

using System;
public class Demo {
    public static void Main() {
        DateTime d1 = DateTime.FromBinary(100000);
        System.Console.WriteLine("DateTime = {0:dd} {0:y}, {0:hh}:{0:mm}:{0:ss}", d1);
    }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

DateTime = 01 January 0001, 12:00:00

값 100000은 매우 작은 틱(tick) 수에 해당하므로, .NET에서 지원하는 최소 날짜인 서기 0001년 1월 1일 자정에 해당하는 결과가 출력됩니다.

정리

DateTime.FromBinary() 메서드는 ToBinary() 메서드와 짝을 이루어 사용되며, DateTime 객체를 안전하게 직렬화하고 역직렬화할 수 있게 해줍니다. 단, 직렬화된 값은 반드시 같은 환경에서 생성된 것이어야 하며, 잘못된 형식의 값을 전달하면 ArgumentException이 발생할 수 있다는 점에 유의해야 합니다.