c# - if else 语句中的时间跨度

标签 c#

我有以下代码,我打算用它来检查用户是否在两个 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
}

最佳答案

在我看来,你的比较是这里的问题

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;
}

关于c# - if else 语句中的时间跨度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55176274/

相关文章:

c# - log4net AppenderSkeleton 忽略 PatternLayout

c# - 使用 Irony 解析 SQL 语句

c# - 用递归求解有向图

c# - C# 中的开源 SIP 拨号器

c# - Windows Phone 8 - 在项目中的现有 txt 文件中读写

c# - 使用 SSH.NET SshClient.RunCommand 执行的命令 (.4gl) 失败,返回 "No such file or directory"

c# - 禁用 GridViewColumn 调整大小

c# - 创建备份批处理文件以备份我的编程代码

c# - 捕获 XamlParseException 中丢失的 DLL

c# - StackTrace 文件名未知