2017-06-05 79 views
1

什么是最清洁的方式来检查提供的日期是否在给定的日期范围内? 例如:最清洁的方式来检查日期是否在一个范围内(可空日期)

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将一次仅比较两个日期。

回答

2

假设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。是否有范围?所以我的示例函数不允许它。对于这种情况,如果要定义该行为,则可以明确处理它。

+1

很好的答案。在旁注中,您应该[在比较日期时转换为UTC](https://stackoverflow.com/questions/6930489/safely-comparing-local-and-universal-datetimes),否则您最终可能会得到不正确的比较结果特别是如果您比较的是DST添加或删除的额外小时内的时间, –

+0

要添加到此,您可以使用minDate.GetValueOrDefault(DateTime.MinValue) –

0
if((minDate == null || minDate < userDate) && (maxDate == null || maxDate > userDate)) { 
    // Do something 
} 
相关问题