如何检查一个DateTime是否晚于在C#中的另一个

我有两个DateTime对象: StartDateEndDate 。 我想确保StartDateEndDate之前。 这是如何在C#中完成的?

 if (StartDate < EndDate) // code 

如果你只是想要的date,而不是时间

 if (StartDate.Date < EndDate.Date) // code 
 if(StartDate < EndDate) {} 

DateTime支持常规比较运算符。

 if(dateTimeA > dateTimeB) Console.WriteLine("Do your own homework"); 

您可以使用重载的<或>运算符。

例如:

 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!"); } 
 StartDate < EndDate 

检查DateTime.Compare方法

我有同样的要求,但是当使用接受的答案时,它没有完成我所有的unit testing。 对我来说,问题是当你有一个新的对象,开始和结束date,你必须设置开始date(在这个阶段你的结束date的最低date值为01/01/0001) – 这个解决scheme确实通过了所有我的unit testing:

  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."); } } } 

它确实错过了开始date和结束date都可以是01/01/0001的边缘情况,但我并不担心这一点。

  if (new DateTime(5000) > new DateTime(1000)) { Console.WriteLine("i win"); } 

这可能太晚了,但为了让其他人可能会受益于此,我使用了一个扩展方法来做到这一点使用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使用这个扩展方法使得这个方法更具通用性,并且可以用于各种数据types而不仅仅是date。

你会这样使用它:

 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 } 

我想certificate,如果你转换成.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); }