如何检查DateTime.Now是否在两个给定的DateTimes之间仅用于时间部分?

Nie*_*els 25 c# wpf windows-phone

对于我的应用程序,我需要知道是否Now()在两个值之间.

用户可以设置开始和结束时间,这样他就不会受到通知的干扰(例如在夜间).

因此,如果有两个TimePickers(开始和结束时间),用户可以设置.

比方说,用户设置22:00StartTime,并07:00EndTime(这将包括夜间).

如何检查是否在DateTime.Now所选的开始和结束时间之间?

编辑: 我只希望这与小时和分钟部分一起使用.因此,如果用户设置开始和结束时间,这应该适用于每晚.

Gab*_*abe 66

首先,您需要将所有内容转换为相同的单位(我们将使用TimeSpan),然后您需要查看开始时间是否跨越午夜,最后根据该检查的结果进行比较:

// convert everything to TimeSpan
TimeSpan start = new TimeSpan(22, 0, 0);
TimeSpan end = new TimeSpan(07, 0, 0);
TimeSpan now = DateTime.Now.TimeOfDay;
// see if start comes before end
if (start < end)
    return start <= now && now <= end;
// start is after end, so do the inverse comparison
return !(end < now && now < start);
Run Code Online (Sandbox Code Playgroud)

这是为您完成的功能:

bool TimeBetween(DateTime datetime, TimeSpan start, TimeSpan end)
{
    // convert datetime to a TimeSpan
    TimeSpan now = datetime.TimeOfDay;
    // see if start comes before end
    if (start < end)
        return start <= now && now <= end;
    // start is after end, so do the inverse comparison
    return !(end < now && now < start);
}
Run Code Online (Sandbox Code Playgroud)

你会称之为:

bool silenceAlarm = TimeBetween(DateTime.Now, StartTime.Value, EndTime.Value);
Run Code Online (Sandbox Code Playgroud)


yhw*_*w42 6

由于你只收集了两次没有日期,你需要弄清楚这两次是否是同一天.如果你把StartTime,EndTimeNowTimeSpans:

if (StartTime > EndTime) 
{
    // the range crosses midnight, do the comparisons independently
    return (StartTime < Now) || (Now < EndTime);
}
else 
{
    // the range is on the same day, both comparisons must be true
    return StartTime < Now && Now < EndTime;
}
Run Code Online (Sandbox Code Playgroud)