DateTimeOffset.Compare() 메서드란?
C#의 DateTimeOffset.Compare() 메서드는 두 개의 DateTimeOffset 개체를 비교하여, 첫 번째 값이 두 번째 값보다 이른지, 동일한지, 아니면 더 늦은지를 판단합니다. 메서드는 그 결과를 나타내는 정수 값을 반환하며, 반환값의 의미는 다음과 같습니다.
- 0 미만(<0) − val1이 val2보다 이른 경우
- 0 − val1과 val2가 동일한 시점인 경우
- 0 초과(>0) − val1이 val2보다 나중인 경우
참고로 이 메서드는 단순히 화면에 표시되는 날짜·시간 문자열만 비교하는 것이 아니라, 각 개체가 가진 UTC 오프셋까지 고려한 실제 시점을 기준으로 비교를 수행합니다. 따라서 시간대(time zone)가 다른 두 값이라도 정확하게 선후 관계를 판별할 수 있습니다.
구문
Compare() 메서드의 기본 구문은 다음과 같습니다.
public static int Compare(DateTimeOffset val1, DateTimeOffset val2);
여기서 val1은 비교할 첫 번째 개체, val2는 비교할 두 번째 개체입니다. 두 매개변수 모두 필수이며, 메서드는 정적(static)이므로 개체 인스턴스 생성 없이 DateTimeOffset.Compare(...) 형태로 바로 호출할 수 있습니다.
예제 1: 첫 번째 값이 더 이른 경우
먼저 두 DateTimeOffset 값의 월(month)이 다른 경우를 살펴보겠습니다.
using System;
public class Demo {
public static void Main() {
DateTimeOffset dateTimeOffset1 = new DateTimeOffset(2019, 09, 09, 8, 20, 10, new TimeSpan(-5, 0, 0));
DateTimeOffset dateTimeOffset2 = new DateTimeOffset(2019, 10, 09, 8, 20, 10, new TimeSpan(-5, 0, 0));
Console.WriteLine("DateTimeOffset1 = {0}", dateTimeOffset1);
Console.WriteLine("DateTimeOffset2 = {0}", dateTimeOffset2);
int res = DateTimeOffset.Compare(dateTimeOffset1, dateTimeOffset2);
// DateTimeOffset1이 DateTimeOffset2보다 이르므로 0보다 작은 값 반환
Console.WriteLine(res);
}
}
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
DateTimeOffset1 = 9/9/2019 8:20:10 AM -05:00 DateTimeOffset2 = 10/9/2019 8:20:10 AM -05:00 -1
dateTimeOffset1(9월)이 dateTimeOffset2(10월)보다 이르기 때문에 비교 결과로 음수인 -1이 반환됩니다.
예제 2: 두 값이 동일한 경우
이번에는 두 DateTimeOffset 값이 완전히 같은 경우입니다.
using System;
public class Demo {
public static void Main() {
DateTimeOffset dateTimeOffset1 = new DateTimeOffset(2019, 09, 09, 8, 20, 10, new TimeSpan(-5, 0, 0));
DateTimeOffset dateTimeOffset2 = new DateTimeOffset(2019, 09, 09, 8, 20, 10, new TimeSpan(-5, 0, 0));
Console.WriteLine("DateTimeOffset1 = {0}", dateTimeOffset1);
Console.WriteLine("DateTimeOffset2 = {0}", dateTimeOffset2);
int res = DateTimeOffset.Compare(dateTimeOffset1, dateTimeOffset2);
// DateTimeOffset1과 DateTimeOffset2가 같으므로 0 반환
Console.WriteLine(res);
}
}
실행 결과는 다음과 같습니다.
DateTimeOffset1 = 9/9/2019 8:20:10 AM -05:00 DateTimeOffset2 = 9/9/2019 8:20:10 AM -05:00 0
두 값의 날짜, 시간, 오프셋이 모두 일치하므로 0이 반환됩니다.
예제 3: 첫 번째 값이 더 나중인 경우
반대로 첫 번째 값이 두 번째 값보다 나중일 때는 어떤 결과가 나오는지 확인해 보겠습니다.
using System;
public class Demo {
public static void Main() {
DateTimeOffset dateTimeOffset1 = new DateTimeOffset(2019, 10, 09, 8, 20, 10, new TimeSpan(-5, 0, 0));
DateTimeOffset dateTimeOffset2 = new DateTimeOffset(2019, 09, 09, 8, 20, 10, new TimeSpan(-5, 0, 0));
Console.WriteLine("DateTimeOffset1 = {0}", dateTimeOffset1);
Console.WriteLine("DateTimeOffset2 = {0}", dateTimeOffset2);
int res = DateTimeOffset.Compare(dateTimeOffset1, dateTimeOffset2);
// DateTimeOffset1이 DateTimeOffset2보다 나중이므로 0보다 큰 값 반환
Console.WriteLine(res);
}
}
실행 결과는 다음과 같습니다.
DateTimeOffset1 = 10/9/2019 8:20:10 AM -05:00 DateTimeOffset2 = 9/9/2019 8:20:10 AM -05:00 1
dateTimeOffset1이 dateTimeOffset2보다 나중이므로 양수인 1이 반환됩니다.
정리
DateTimeOffset.Compare() 메서드는 날짜와 시간뿐만 아니라 시간대 오프셋까지 고려하여 두 DateTimeOffset 값을 신뢰성 있게 비교할 수 있는 유용한 도구입니다. 반환값이 음수인지, 0인지, 양수인지만 확인하면 두 값의 선후 관계를 손쉽게 판단할 수 있으며, 로그 분석, 스케줄링, 만료 시간 검증 등 다양한 시나리오에서 활용할 수 있습니다.