Как сравнить DateTime в С#?
Я не хочу, чтобы пользователь указывал дату или время.
Как я могу сравнить, если введенная дата и время МЕНЕЕ, то текущее время?
Если текущая дата и время 17 июня 2010 года, 12:25 вечера, я хочу, чтобы пользователь не мог дать дату до 17 июня -2010 и время до 12:25 вечера.
Как и моя функция, возвращает false, если время, введенное пользователем, 16 июня 2010 года и время 12:24 вечера
Ответы
Ответ 1
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
Ответ 2
Microsoft также реализовала операторы '<' и ' > '. Поэтому вы используете их для сравнения двух дат.
if (date1 < DateTime.Now)
Console.WriteLine("Less than the current time!");
Ответ 3
Ответ 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
.
Ответ 4
В общем случае вам нужно сравнить DateTimes
с тем же Kind
:
if (date1.ToUniversalTime() < date2.ToUniversalTime())
Console.WriteLine("date1 is earlier than date2");
Объяснение из MSDN о DateTime.Compare
(это также относится к таким операторам, как >
, <
, ==
и т.д.):
Чтобы определить отношение t1 к t2, метод Compare сравнивает свойство Ticks для t1 и t2, но игнорирует их свойство Kind. Перед сравнением объектов DateTime убедитесь, что объекты представляют время в одном часовом поясе.
Таким образом, простое сравнение может дать неожиданный результат при работе с DateTimes
, представленными в разных часовых поясах.
Ответ 5
//Time compare.
private int CompareTime(string t1, string t2)
{
TimeSpan s1 = TimeSpan.Parse(t1);
TimeSpan s2 = TimeSpan.Parse(t2);
return s2.CompareTo(s1);
}
Ответ 6
Если у вас есть два DateTime, которые выглядят одинаково, но Compare или Equals не возвращает то, что вы ожидаете, это как их сравнить.
Вот пример с точностью до 1 миллисекунды:
bool areSame = (date1 - date2) > TimeSpan.FromMilliseconds(1d);
Ответ 7
public static bool CompareDateTimes(this DateTime firstDate, DateTime secondDate)
{
return firstDate.Day == secondDate.Day && firstDate.Month == secondDate.Month && firstDate.Year == secondDate.Year;
}