我想从日期时间中选择一个特定时间范围内的日期。我想在我的日期时间选择器中选择用户的生日。我想只添加年龄在18到100岁之间的用户。我想检查我的日期时间选择器的选定值是否大于从今天开始的18年以及日期时间选择器的选定值,从今天起不到100年。我试过这个,但它给了我错误的输出。
if (dtpDOB.Value<DateTime.Today.AddYears(-18)&& dtpDOB.Value>DateTime.Today.AddYears(-100))
{
//
}
答案 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
}