Как сравнить даты в C # - PullRequest
56 голосов
/ 06 июля 2011

У меня две даты. Одна дата вводится, а другая - DateTime.Now. У меня они есть в формате mm/dd/yyyy, это может быть даже формат m / d / yy. Обе даты обнуляются, т. Е. Тип данных равен DateTime?, поскольку я могу передать значение null также в качестве входных данных. Теперь я хочу сравнить только две даты в формате mm/dd/yyyy или m/d/yy.

Ответы [ 3 ]

76 голосов
/ 06 июля 2011

Если у вас есть даты в переменных DateTime, они не имеют формат.

Вы можете использовать свойство Date, чтобы вернуть значение DateTime с частью времени, установленной на полночь. Итак, если у вас есть:

DateTime dt1 = DateTime.Parse("07/12/2011");
DateTime dt2 = DateTime.Now;

if(dt1.Date > dt2.Date)
{
     //It's a later date
}
else
{
     //It's an earlier or equal date
}
30 голосов
/ 06 июля 2011

Если у вас дата в переменной DateTime, то это объект DateTime и не содержит никакого формата. Отформатированные даты выражаются как string, когда вы вызываете метод DateTime.ToString и указываете формат в нем.

Допустим, у вас есть две переменные DateTime, вы можете использовать метод сравнения для сравнения,

DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 2, 0, 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";

Фрагмент кода, взятый из msdn .

8 голосов
/ 06 июля 2011

Во-первых, следует понимать, что DateTime объекты не отформатированы.Они просто хранят год, месяц, день, час, минуту, секунду и т. Д. В виде числового значения, и форматирование происходит, когда вы хотите как-то представить его в виде строки.Вы можете сравнивать DateTime объекты без их форматирования.

Чтобы сравнить входную дату с DateTime.Now, необходимо сначала проанализировать входные данные в дату, а затем сравнить только части года / месяца / дня:

DateTime inputDate;
if(!DateTime.TryParse(inputString, out inputDate))
    throw new ArgumentException("Input string not in the correct format.");

if(inputDate.Date == DateTime.Now.Date) {
    // Same date!
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...