最清洁的方式来检查日期是否在一个范围内(可空日期)
问题描述:
什么是最清洁的方式来检查提供的日期是否在给定的日期范围内? 例如:最清洁的方式来检查日期是否在一个范围内(可空日期)
DateTime? maxDate
DateTime? minDate
DateTime? userDate
我要检查,如果userDate在上述范围内。 min或max可以为null。
因此,例如:
minDate = new DateTime(2017, 1, 1);
maxDate = null;
userDate = new DateTime(2017, 5, 3);
在这种情况下userDate将在范围内,因为它是更大的那么的minDate并没有指定的maxDate。
我想过使用DateTime.Compare,但似乎我会创建一个混乱的if/then语句来检查userDate minDate和maxDate变量,因为DateTime.Compare将一次仅比较两个日期。
答
假设null
最小值/最大值意味着在该方向上“无界”,你可以采取的事实DateTime
本身有一定的限度的优势。
例如:
public bool IsDateInRange(DateTime value, DateTime? min, DateTime? max)
{
//Use provided min/max times if they were not null. Fallback to Min/Max supported values from DateTime
min = min ?? DateTime.MinValue;
max = max ?? DateTime.MaxValue;
return value >= min && value <= max;
}
我真的不知道你会如何想处理的情况下userDate = null
。是否有范围?所以我的示例函数不允许它。对于这种情况,如果要定义该行为,则可以明确处理它。
答
if((minDate == null || minDate < userDate) && (maxDate == null || maxDate > userDate)) {
// Do something
}
很好的答案。在旁注中,您应该[在比较日期时转换为UTC](https://stackoverflow.com/questions/6930489/safely-comparing-local-and-universal-datetimes),否则您最终可能会得到不正确的比较结果特别是如果您比较的是DST添加或删除的额外小时内的时间, –
要添加到此,您可以使用minDate.GetValueOrDefault(DateTime.MinValue) –