У меня есть два объекта DateTime
: StartDate
и EndDate
. Я хочу убедиться, что StartDate
до EndDate
. Как это делается на С#?
Как проверить, является ли один DateTime больше, чем другой в С#
Ответ 1
if (StartDate < EndDate)
// code
если вам нужны только даты, а не время
if (StartDate.Date < EndDate.Date)
// code
Ответ 2
if(StartDate < EndDate)
{}
DateTime поддерживает обычные операторы сравнения.
Ответ 3
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
Ответ 4
Вы можете использовать перегруженный < или > .
Например:
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...
Ответ 5
if (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
Ответ 6
StartDate < EndDate
Ответ 7
Проверьте метод DateTime.Compare
Ответ 8
Возможно, это слишком поздно, но для того, чтобы помочь другим людям, которые могут наткнуться на это, я использовал метод расширения, используя IComparable
следующим образом:
public static class BetweenExtension
{
public static bool IsBetween<T>(this T value, T min, T max) where T : IComparable
{
return (min.CompareTo(value) <= 0) && (value.CompareTo(max) <= 0);
}
}
Использование этого метода расширения с помощью IComparable
делает этот метод более общим и делает его пригодным для использования с широким спектром типов данных, а не только с датами.
Вы бы использовали его следующим образом:
DateTime start = new DateTime(2015,1,1);
DateTime end = new DateTime(2015,12,31);
DateTime now = new DateTime(2015,8,20);
if(now.IsBetween(start, end))
{
//Your code here
}
Ответ 9
У меня было такое же требование, но при использовании принятого ответа он не выполнил все мои модульные тесты. Проблема для меня - это когда у вас есть новый объект с датами начала и окончания, и вы должны установить дату начала (на этом этапе ваша дата окончания имеет минимальное значение даты 01/01/0001) - это решение действительно прошло все мои модульные тесты:
public DateTime Start
{
get { return _start; }
set
{
if (_end.Equals(DateTime.MinValue))
{
_start = value;
}
else if (value.Date < _end.Date)
{
_start = value;
}
else
{
throw new ArgumentException("Start date must be before the End date.");
}
}
}
public DateTime End
{
get { return _end; }
set
{
if (_start.Equals(DateTime.MinValue))
{
_end = value;
}
else if (value.Date > _start.Date)
{
_end = value;
}
else
{
throw new ArgumentException("End date must be after the Start date.");
}
}
}
Он пропускает край, где даты начала и окончания могут быть 01/01/0001, но меня это не беспокоит.
Ответ 10
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
Ответ 11
Я хотел бы продемонстрировать, что если вы конвертируете в .Date, вам не нужно беспокоиться о часах/минутах/секундах и т.д.:
[Test]
public void ConvertToDateWillHaveTwoDatesEqual()
{
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
Assert.IsTrue(d1 < d2);
DateTime d3 = new DateTime(2008, 1, 1,7,0,0);
DateTime d4 = new DateTime(2008, 1, 1,10,0,0);
Assert.IsTrue(d3 < d4);
Assert.IsFalse(d3.Date < d4.Date);
}
Ответ 12
Если вы работаете в ASP.NET, необходимо сравнить значения между двумя объектами CalendarExtender, способ сравнения дат немного отличается, но все же очень идентичен.
if(calStartDate.SelectedDate > calEndDate.SelectedDate) {
MessageBox.ShowMessage("That not how time works.");
}
Где calStartDate и calEndDate установлены в качестве идентификаторов для ваших CalendarExtenders.