3 回答
TA贡献1877条经验 获得超6个赞
不,做一个简单的比较对我来说很好看:
return dateToCheck >= startDate && dateToCheck < endDate;
值得考虑的事情:
DateTime在时区方面有点奇怪。它可能是UTC,它可能是“本地的”,它可能是模棱两可的。确保你将苹果与苹果进行比较。
考虑您的起点和终点应该是包容性的还是排他性的。我已经将上面的代码视为包含下限和独占上限。
TA贡献1812条经验 获得超5个赞
通常我会为这些事情创建Fowler's Range实现。
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)
TA贡献1864条经验 获得超6个赞
您可以使用扩展方法使其更具可读性:
public static class DateTimeExtensions
{
public static bool InRange(this DateTime dateToCheck, DateTime startDate, DateTime endDate)
{
return dateToCheck >= startDate && dateToCheck < endDate;
}
}
现在你可以写:
dateToCheck.InRange(startDate, endDate)
- 3 回答
- 0 关注
- 766 浏览
添加回答
举报