Câu trả lời:
if (StartDate < EndDate)
// code
nếu bạn chỉ muốn ngày tháng, không phải thời gian
if (StartDate.Date < EndDate.Date)
// code
if(StartDate < EndDate)
{}
DateTime hỗ trợ các toán tử so sánh thông thường.
if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework");
Bạn có thể sử dụng các toán tử <hoặc> được nạp chồng.
Ví dụ:
DateTime d1 = new DateTime(2008, 1, 1);
DateTime d2 = new DateTime(2008, 1, 2);
if (d1 < d2) { ...
if (StartDate>=EndDate)
{
throw new InvalidOperationException("Ack! StartDate is not before EndDate!");
}
Điều này có lẽ là quá muộn, nhưng để có lợi cho những người khác có thể tình cờ gặp phải điều này, tôi đã sử dụng một phương pháp mở rộng thực hiện việc này bằng cách sử dụng IComparable
như sau:
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);
}
}
Sử dụng phương pháp mở rộng này với IComparable
làm cho phương pháp này chung chung hơn và làm cho nó có thể sử dụng được với nhiều loại dữ liệu khác nhau chứ không chỉ ngày tháng.
Bạn sẽ sử dụng nó như thế này:
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
}
Tôi đã có yêu cầu tương tự, nhưng khi sử dụng câu trả lời được chấp nhận, nó không đáp ứng được tất cả các bài kiểm tra đơn vị của tôi. Vấn đề đối với tôi là khi bạn có một đối tượng mới, với Ngày bắt đầu và Ngày kết thúc và bạn phải đặt Ngày bắt đầu (ở giai đoạn này Ngày kết thúc của bạn có giá trị ngày tối thiểu là 01/01/0001) - giải pháp này đã vượt qua tất cả bài kiểm tra đơn vị của tôi:
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.");
}
}
}
Nó bỏ lỡ trường hợp cạnh mà cả ngày Bắt đầu và Kết thúc có thể là 01/01/0001 nhưng tôi không lo lắng về điều đó.
if (new DateTime(5000) > new DateTime(1000))
{
Console.WriteLine("i win");
}
Tôi muốn chứng minh rằng nếu bạn chuyển đổi thành .Date mà bạn không cần phải lo lắng về giờ / phút / giây, v.v.:
[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);
}