C #에서 DateTime을 비교하는 방법은 무엇입니까?


137

사용자가 이전 날짜 또는 시간을 제공하고 싶지 않습니다.

입력 한 날짜와 시간이 현재 시간보다 적은지 어떻게 비교할 수 있습니까?

현재 날짜와 시간이 2010 년 6 월 17 일 오후 12시 25 분이면 사용자는 2010 년 6 월 17 일 이전과 오후 12시 25 분 이전의 날짜를 사용자에게 줄 수 없습니다.

사용자가 입력 한 시간이 2010 년 6 월 16 일이고 오후 12시 24 분이면 내 함수가 false를 반환하는 것처럼

답변:


179

MSDN : DateTime.Compare

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 1, 12, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

Console.WriteLine("{0} {1} {2}", date1, relationship, date2);
// The example displays the following output:
//    8/1/2009 12:00:00 AM is earlier than 8/1/2009 12:00:00 PM

3
귀하의 답변은 날짜가 이전 또는 이후임을 아는 대신 차이점이 무엇인지 확인할 수있는 방법을 제공합니다. 물론 그의 대답은 OP에 더 좋지만 Google (자체 포함)에서 온 일부 사람들에게는 더 좋습니다.
levininja

2
이 코드가 사용되는 레거시 코드를보고 있기 때문에 귀하의 답변이 가치있는 것으로 나타났습니다
Erik Bergstedt

여기입니다 MSDN 링크
거친 주권

그러나 디버그 관점에서 MuSTaNG의 대답은 더 읽기 쉽습니다.
Himalaya Garg

295

Microsoft는 '<'및 '>'연산자도 구현했습니다. 따라서이 두 날짜를 비교하는 데 사용합니다.

if (date1 < DateTime.Now)
   Console.WriteLine("Less than the current time!");

6
소스 MSDN; 이들은 "날짜보다 늦게", "날짜 시간보다 낮음", "날짜 시간보다 낮음"으로 표시되는 DateTime 연산자로 문서화되어 있습니다. msdn.microsoft.com/en-us/library/ff986512%28v=vs.90%29.aspx
Salman Siddiqui


2
Unity 2017을 사용하고 있으며이 연산자를 사용하여 목록을 정렬하면 잘못된 결과가 나타납니다. 나는 DateTime.ticks를 직접 비교하려고 시도했지만 실패했습니다. 올바른 결과를 얻으려면 DateTime.CompareTo를 사용해야했지만 이유를 모르겠습니다.
lin

2
이것은 잘못이다. UTC와 현지 시간을 올바른 방식으로 비교할 수 없습니다.
Altiano Gerung

4
이것은 완전한 답변이 아닙니다. DateTime Kind를 ocnsideration으로 가져갈 때 date1.ToLocalTime() < DateTime.Now또는 이어야합니다 date1.ToUniversalTime() < DateTime.UtcNow.
yurislav

21

MuSTaNG의 답변에 모든 내용이 나와 있지만 링크와 모두를 사용하여 조금 더 정교하게 만들기 위해 추가하고 있습니다.


기존 사업자

DateTime.NET Framework 1.1부터 사용할 수 있습니다 . 또한 DateTime기존 연산자 +와를 사용하여 객체의 뺄셈 도 가능합니다 -.

MSDN의 한 가지 예 :

평등:
System.DateTime april19 = new DateTime(2001, 4, 19);
System.DateTime otherDate = new DateTime(1991, 6, 5);

// areEqual gets false.
bool areEqual = april19 == otherDate;

otherDate = new DateTime(2001, 4, 19);
// areEqual gets true.
areEqual = april19 == otherDate;

다른 연산자도 마찬가지로 사용할 수 있습니다.

사용 가능한 모든 연산자 목록은 다음과 같습니다 DateTime.


1
정교하게 답변을 편집 할 수 있습니다. 어쨌든 +DateTime피연산자 에는 사용할 수 없습니다 . DateTime - DateTime또는 DateTime + TimeSpan, 또는 DateTime - TimeSpan.
Joey

5

일반적으로DateTimes 동일한 것과 비교해야합니다 Kind.

if (date1.ToUniversalTime() < date2.ToUniversalTime())
    Console.WriteLine("date1 is earlier than date2");

에서 설명 MSDN가 에 대해 DateTime.Compare(이것은 또한 같은 사업자 관련 >, <, ==등)

t1과 t2의 관계를 확인하기 위해 Compare 메서드는 t1과 t2의 Ticks 속성을 비교하지만 Kind 속성은 무시합니다 . DateTime 오브젝트를 비교하기 전에 오브젝트가 동일한 시간대의 시간을 나타내는 지 확인하십시오.

따라서 간단한 비교는 DateTimes다른 시간대로 표시되는 처리시 예기치 않은 결과를 제공 할 수 있습니다 .


이것 때문에 버그가 생겼습니다 ... 그들이 그 방법을 만들 때 생각하고있었습니다 :(
Legolas

3

두 개의 DateTime이 동일하게 보이지만 비교 또는 같음이 예상 한 결과를 반환하지 않는 경우이를 비교하는 방법입니다.

1 밀리 초 정밀도의 예는 다음과 같습니다.

bool areSame = (date1 - date2) > TimeSpan.FromMilliseconds(1d);

1
//Time compare.
private int CompareTime(string t1, string t2)
{
    TimeSpan s1 = TimeSpan.Parse(t1);
    TimeSpan s2 = TimeSpan.Parse(t2);
    return s2.CompareTo(s1);
}

2
그는 비교 DateTime하지 않기를 원합니다string
Danh

날짜 시간을 문자열로 변환 할 수 있습니다
Dieu Phan Dinh

나 : 당신은 사용할 수 있습니다 : (은 시작일, 종료일) DateTime.Compare
디유 판 딘

내 문제가 아니며 Ahmet 과 다른 가요?
Danh

0

Unity 환경의 전형적인 간단한 예는 다음과 같습니다.

using UnityEngine;

public class Launch : MonoBehaviour
{
    void Start()
    {
        Debug.Log("today " + System.DateTime.Now.ToString("MM/dd/yyyy"));

        // don't allow the app to be run after June 10th
        System.DateTime lastDay = new System.DateTime(2020, 6, 10);
        System.DateTime today = System.DateTime.Now;

        if (lastDay < today) {
            Debug.Log("quit the app");
            Application.Quit();
        }
        UnityEngine.SceneManagement.SceneManager.LoadScene("Welcome");
    }
}

-3
public static bool CompareDateTimes(this DateTime firstDate, DateTime secondDate) 
{
   return firstDate.Day == secondDate.Day && firstDate.Month == secondDate.Month && firstDate.Year == secondDate.Year;
}

4
.NET에서 "비교"는 일반적으로 "평등 검사"가 아니라 "상대적 비교"를 의미합니다. 여기서의 질문은 상대 비교에 관한 것이 었습니다. 또한 코드를 올바르게 형식화하려고 노력하지 않았습니다.
Lasse V. Karlsen
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.