如何检查一个DateTime是否晚于在C#中的另一个
我有两个DateTime
对象: StartDate
和EndDate
。 我想确保StartDate
在EndDate
之前。 这是如何在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); }