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

How to check selected value of datetime picker to be in some value range?

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

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

我认为您的 if 语句永远不会为真。

尝试使用 OR 而不是 AND:

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

简单的布尔条件有时会令人困惑(我一开始也提交了一个错误的答案,但立即将其删除)。您的条件对于确定日期 是否正常 :

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

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

请注意,您最后检查了间隔的 "left" 端点。今天减去 100 年是两个时间点中更早的

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

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

或等价地,根据德摩根定律:

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

这里我使用了"algebraic"事实

!(x < b && x > a)

在逻辑上等同于

x >= b || x <= a

其中 "strict" < 反转并在否定时变为非严格。

如果今天实际上是用户的 18 岁或 100 岁生日,您应该确定自己想要什么行为。