如何知道DateTime是否在C#中的DateRange之间

我需要知道Date是否在DateRange之间。 我有三个date:

// The date range DateTime startDate; DateTime endDate; DateTime dateToCheck; 

简单的解决scheme是做一个比较,但有没有更聪明的方法来做到这一点?

提前致谢。

不,做一个简单的比较看起来不错,对我来说:

 return dateToCheck >= startDate && dateToCheck < endDate; 

需要考虑的事情是:

  • DateTime在时区方面有些奇怪。 它可能是UTC,它可能是“本地”,它可能是模棱两可的。 确保你比较苹果和苹果。
  • 考虑你的开始和结束点应该是包容还是独占。 我已经把上面的代码当作一个包含的下界和一个独占的上界。

通常我会为这些事情创build福勒的范围实现。

 public interface IRange<T> { T Start { get; } T End { get; } bool Includes(T value); bool Includes(IRange<T> range); } public class DateRange : IRange<DateTime> { public DateRange(DateTime start, DateTime end) { Start = start; End = end; } public DateTime Start { get; private set; } public DateTime End { get; private set; } public bool Includes(DateTime value) { return (Start <= value) && (value <= End); } public bool Includes(IRange<DateTime> range) { return (Start <= range.Start) && (range.End <= End); } } 

用法很简单:

 DateRange range = new DateRange(startDate, endDate); range.Includes(date) 

你可以使用扩展方法使其更具可读性:

 public static class DateTimeExtensions { public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate) { return dateToCheck >= startDate && dateToCheck < endDate; } } 

现在你可以写:

 dateToCheck.InRange(startDate, endDate) 

您可以使用:

 return (dateTocheck >= startDate && dateToCheck <= endDate); 

我发现以下图书馆在做任何datemath时都是最有帮助的。 我仍然很惊讶,这是.Net框架的一部分。

http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET