C#의 DateTimeOffset.ToUnixTimeSeconds() 메서드는 1970년 1월 1일 00:00:00Z(유닉스 에포크) 이후 경과한 시간을 초 단위로 반환합니다. 이 값은 흔히 '유닉스 타임스탬프'라고 불리며, 다양한 시스템과 API에서 시간을 표현하는 표준 방식으로 널리 사용됩니다.
구문
메서드의 기본 구문은 다음과 같습니다.
public long ToUnixTimeSeconds ();
반환형이 long이라는 점에 주목할 필요가 있습니다. 유닉스 에포크보다 이전 날짜를 다루면 음수 값이 반환되고, 1970년 이후 날짜에는 양수 값이 반환됩니다.
예제 1
다음은 DateTimeOffset.ToUnixTimeSeconds() 메서드를 활용한 첫 번째 예제입니다.
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 seconds: "+dateTimeOffset.ToUnixTimeSeconds());
DateTimeOffset res = dateTimeOffset.ToOffset(new TimeSpan(-5, 0, 0));
Console.WriteLine("\nDateTimeOffset (updated) = {0}", res);
Console.WriteLine("Number of seconds: "+res.ToUnixTimeSeconds());
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DateTimeOffset = 11/11/1967 6:15:45 AM +03:00 Number of seconds: -67553055 DateTimeOffset (updated) = 11/10/1967 10:15:45 PM -05:00 Number of seconds: -67553055
위 예제에서 확인할 수 있듯이, 1970년 이전 날짜(1967년)에 대해서는 음수 초 값이 반환됩니다. 또한 ToOffset() 메서드로 UTC 오프셋을 +03:00에서 -05:00으로 변경해도 동일한 시점을 나타내므로 유닉스 초 값은 그대로 유지됩니다.
예제 2
이번에는 2019년 날짜를 사용한 또 다른 예제를 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
DateTimeOffset dateTimeOffset = new DateTimeOffset(2019, 11, 11, 6, 15, 45, new TimeSpan(3, 0, 0));
Console.WriteLine("DateTimeOffset = {0}", dateTimeOffset);
Console.WriteLine("Number of seconds: "+dateTimeOffset.ToUnixTimeSeconds());
DateTimeOffset res = dateTimeOffset.ToOffset(new TimeSpan(-5, 0, 0));
Console.WriteLine("\nDateTimeOffset (updated) = {0}", res);
Console.WriteLine("Number of seconds: "+res.ToUnixTimeSeconds());
}
}출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DateTimeOffset = 11/11/2019 6:15:45 AM +03:00 Number of seconds: 1573442145 DateTimeOffset (updated) = 11/10/2019 10:15:45 PM -05:00 Number of seconds: 1573442145
1970년 이후의 날짜이므로 양수 값이 반환되었습니다. 두 예제 모두 오프셋이 서로 달라도 같은 시점을 가리키면 동일한 유닉스 타임스탬프가 계산되는데, 이는 ToUnixTimeSeconds()가 내부적으로 UTC 기준으로 값을 산출하기 때문입니다.