如何检查日期时间选择器的选定值是否在某个值范围内?

时间:2015-01-31 11:53:20

标签: c# datetime datetimepicker

我想从日期时间中选择一个特定时间范围内的日期。我想在我的日期时间选择器中选择用户的生日。我想只添加年龄在18到100岁之间的用户。我想检查我的日期时间选择器的选定值是否大于从今天开始的18年以及日期时间选择器的选定值,从今天起不到100年。我试过这个,但它给了我错误的输出。

        if (dtpDOB.Value<DateTime.Today.AddYears(-18)&& dtpDOB.Value>DateTime.Today.AddYears(-100))
        {
            //
        }

2 个答案:

答案 0 :(得分:1)

简单的布尔条件有时会令人困惑(我最初也提交了错误的答案,但立即删除了它)。您的条件是否正确,以确定日期是否正常

if (dtpDOB.Value < DateTime.Today.AddYears(-18)
    && dtpDOB.Value > DateTime.Today.AddYears(-100))
{
    // the date entered was valid!
}

您可以在此之后放置else块并在那里处理不需要的输入。

请注意,您要检查&#34;左&#34;最后一个区间的终点。今天减去100年是两个时间点的早期

我想你想表达这种否定。就像这样:

if (!(dtpDOB.Value < DateTime.Today.AddYears(-18)
    && dtpDOB.Value > DateTime.Today.AddYears(-100)))
{
    // the date entered was bad, outside permitted range
}

或同等地,de Morgan的法律:

if (dtpDOB.Value >= DateTime.Today.AddYears(-18)
    || dtpDOB.Value <= DateTime.Today.AddYears(-100))
{
    // the date entered was bad, outside permitted range
}

在这里,我使用了&#34;代数&#34;事实

!(x < b && x > a)

在逻辑上等同于

x >= b || x <= a

&#34;严格&#34; <在否定时反转并变得非严格。

如果今天实际上是用户的第18个或第100个生日,您应该确定您想要的行为。

答案 1 :(得分:0)

我不认为你的if语句会成真。

尝试使用OR而不是AND:

    if (dtpDOB.Value<DateTime.Today.AddYears(-18) || dtpDOB.Value>DateTime.Today.AddYears(-100))
    {
        // show error
    }