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

C# DateTimeOffset.ToUnixTimeMilliseconds() 메서드 – 유닉스 타임스탬프(밀리초) 변환 방법


C#의 DateTimeOffset.ToUnixTimeMilliseconds() 메서드는 해당 DateTimeOffset 개체가 가리키는 시점부터 기준 시각인 1970-01-01T00:00:00.000Z(유닉스 에포크)까지 경과된 시간을 밀리초 단위로 반환합니다. 이렇게 얻은 값은 흔히 ‘유닉스 타임스탬프’라 부르며, 데이터베이스·API·로그 시스템 등에서 시각 정보를 교환할 때 널리 사용되는 표준 표현 방식입니다.

구문(Syntax)

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

public long ToUnixTimeMilliseconds();

주요 특징

  • 반환 형식은 64비트 정수인 long입니다.
  • 나타내는 순간(instant)이 같다면 시간대 오프셋이 달라도 항상 동일한 값을 반환합니다.
  • 1970년 이전의 날짜·시간에 대해서는 음수 값이 반환됩니다.
  • 초 단위 값이 필요한 경우에는 ToUnixTimeSeconds() 메서드를 사용할 수 있습니다.

예제 1

다음은 DateTimeOffset.ToUnixTimeMilliseconds() 메서드를 사용하는 첫 번째 예제입니다.

using System;

public class Demo {
    public static void Main() {
        DateTimeOffset dateTimeOffset = new DateTimeOffset(2019, 9, 10, 4, 20, 10, new TimeSpan(5, 0, 0));
        Console.WriteLine("DateTimeOffset = {0}", dateTimeOffset);
        Console.WriteLine("Number of milliseconds: " + dateTimeOffset.ToUnixTimeMilliseconds());

        DateTimeOffset res = dateTimeOffset.ToOffset(new TimeSpan(-5, 0, 0));
        Console.WriteLine("\nDateTimeOffset (updated) = {0}", res);
        Console.WriteLine("Number of milliseconds: " + res.ToUnixTimeMilliseconds());
    }
}

실행 결과

위 예제를 실행하면 다음과 같은 출력이 생성됩니다.

DateTimeOffset = 9/10/2019 4:20:10 AM +05:00
Number of milliseconds: 1568071210000
DateTimeOffset (updated) = 9/9/2019 6:20:10 PM -05:00
Number of milliseconds: 1568071210000

출력을 살펴보면 시간대 오프셋을 +05:00에서 -05:00으로 변경했음에도 두 값 모두 1568071210000으로 동일합니다. 이는 두 DateTimeOffset이 서로 다른 지역 시각으로 표시될 뿐, 실제로는 같은 순간을 나타내고 있기 때문입니다.

예제 2

이번에는 1970년 이전 날짜에 대해 어떤 값이 반환되는지 확인해 보겠습니다.

using System;

public class Demo {
    public static void Main() {
        DateTimeOffset dateTimeOffset = new DateTimeOffset(1967, 11, 11, 6, 15, 45, new TimeSpan(3, 0, 0));
        Console.WriteLine("DateTimeOffset = {0}", dateTimeOffset);
        Console.WriteLine("Number of milliseconds: " + dateTimeOffset.ToUnixTimeMilliseconds());

        DateTimeOffset res = dateTimeOffset.ToOffset(new TimeSpan(-5, 0, 0));
        Console.WriteLine("\nDateTimeOffset (updated) = {0}", res);
        Console.WriteLine("Number of milliseconds: " + res.ToUnixTimeMilliseconds());
    }
}

실행 결과

위 예제를 실행하면 다음과 같은 출력이 생성됩니다.

DateTimeOffset = 11/11/1967 6:15:45 AM +03:00
Number of milliseconds: -67553055000
DateTimeOffset (updated) = 11/10/1967 10:15:45 PM -05:00
Number of milliseconds: -67553055000

유닉스 에포크보다 앞선 1967년의 날짜이므로 음수인 -67553055000이 반환되었습니다. 마찬가지로 오프셋을 변경해도 동일한 값이 유지되는 것을 확인할 수 있습니다.

정리

DateTimeOffset.ToUnixTimeMilliseconds()는 특정 시점을 밀리초 단위의 유닉스 타임스탬프(long)로 손쉽게 변환해 주는 메서드입니다. 시간대와 무관하게 동일한 순간이면 항상 같은 값을 보장하므로, 서로 다른 시스템 간에 시각 데이터를 주고받을 때 매우 유용합니다. 초 단위 값이 필요하다면 ToUnixTimeSeconds() 메서드를 활용하면 됩니다.