我有以下代码,我打算用它来检查用户在两个datetimepickers
之间是否放置了正确的天数。
我在Google上进行过搜索,有些帖子说使用var
,有些帖子说parse
,但仍然无法正常工作,在检查时不会弹出消息框。
我已经通过使用标签作为结果的容器并使用if else语句来检查文本是否等于14,15或16来使其工作。它起作用是因为我只需要检测其14 ,15或16,但是如果遇到需要比较大量数字的情况,该怎么办?希望我能得到比现在更好的解决方案。
有人可以告诉我如何在if else语句中比较时间跨度吗?非常感谢。祝你有美好的一天:)
DateTime dateFrom = from_dtPicker.Value;
DateTime dateTo = to_dtPicker.Value;
TimeSpan DayDifference = dateTo - dateFrom;
double NumberOfDays = DayDifference.TotalDays;
if ((NumberOfDays < 14) && (NumberOfDays > 16))
{
//message box
}
这就是我奇怪的解决方案的意思,
DateTime dateFrom = pp_from_dtPicker.Value;
DateTime dateTo = pp_to_dtPicker.Value;
TimeSpan DayDifference = dateTo - dateFrom;
numofdaysLBL.Text = DayDifference.TotalDays.ToString();
if ((numofdaysLBL.Text != "14") && (numofdaysLBL.Text != "15") && (numofdaysLBL.Text != "16"))
{
//msgbox
}
答案 0 :(得分:2)
在我看来,您的比较是这里的问题
if ((NumberOfDays < 14) && (NumberOfDays > 16))
NumberOfDays不能同时小于14且大于16。而是反转比较:
if ((NumberOfDays >= 14) && (NumberOfDays <= 16))
编辑:也许我误解了您的要求(如评论中所指出)。如果您想要一个比较通用的日期比较解决方案,只需将代码包装到一个函数中
bool AreDatesClose(DateTime d1, DateTime d2, double minDaysApart, double maxDaysApart)
{
var timespan = d1 - d2;
return timespan.TotalDays >= minDaysApart && timespan.TotalDays <= maxDaysApart;
}
答案 1 :(得分:1)
您可以编写一个函数,让您知道NumberOfDays
是否在给定范围之间
public bool IsGivenDateInRange(double numberOfDays, double startDate, double endDate)
{
return numberOfDays >= startDate && numberOfDays <= endDate;
}
现在在条件中使用此功能
if(IsGivenDateInRange(NumberOfDays, 14, 16)) //Instead of 14 and 16 you can use any number
{
//Your logic
}
根据问题中的新修改内容,如果您想在日期不在此范围内时显示消息框,则可以使用相同的功能,但取反
if(!IsGivenDateInRange(NumberOfDays, 14, 16)) //Instead of 14 and 16 you can use any number
{
//MessageBox.Show();
//Your logic
}