查找当前时间是否在某个时间范围内

使用.NET 3.5

我想确定当前时间是否在一个时间范围内。

到目前为止,我已经掌握了时间:

DateTime currentTime = new DateTime();
currentTime.TimeOfDay;

我忘了如何将时间范围转换并进行比较。 这样行吗?

if (Convert.ToDateTime("11:59") <= currentTime.TimeOfDay
&& Convert.ToDateTime("13:01") >= currentTime.TimeOfDay)
{
//match found
}

更新1: 感谢大家的建议。我不太熟悉 TimeSpan 函数。

207370 次浏览
if (new TimeSpan(11,59,0) <= currentTime.TimeOfDay && new TimeSpan(13,01,0) >=  currentTime.TimeOfDay)
{
//match found
}

如果您确实希望将字符串解析为 TimeSpan,那么可以使用:

    TimeSpan start = TimeSpan.Parse("11:59");
TimeSpan end = TimeSpan.Parse("13:01");

用于检查一天中使用的时间:

TimeSpan start = new TimeSpan(10, 0, 0); //10 o'clock
TimeSpan end = new TimeSpan(12, 0, 0); //12 o'clock
TimeSpan now = DateTime.Now.TimeOfDay;


if ((now > start) && (now < end))
{
//match found
}

绝对时间使用:

DateTime start = new DateTime(2009, 12, 9, 10, 0, 0)); //10 o'clock
DateTime end = new DateTime(2009, 12, 10, 12, 0, 0)); //12 o'clock
DateTime now = DateTime.Now;


if ((now > start) && (now < end))
{
//match found
}

你非常接近,问题是你正在比较一个日期时间和一天的时间。您需要做的是添加。属性设置为 Convert.ToDateTime ()函数的末尾。

TimeOfDay财产返回一个 TimeSpan值。

尝试以下代码:

TimeSpan time = DateTime.Now.TimeOfDay;


if (time > new TimeSpan(11, 59, 00)        //Hours, Minutes, Seconds
&& time < new TimeSpan(13, 01, 00)) {
//match found
}

同样,new DateTime()DateTime.MinValue相同,并且总是等于 1/1/0001 12:00:00 AM。(值类型不能有非空的默认值)要使用 DateTime.Now

尝试使用 C # 中的 TimeRange 对象来完成您的目标。

TimeRange timeRange = new TimeRange();
timeRange = TimeRange.Parse("13:00-14:00");


bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay);
Console.Write(IsNowInTheRange);

这就是我得到的使用 TimeRange 的例子

这里有一些很好的答案,但是没有一个能说明你的开始时间和结束时间是在不同的一天。如果你需要跨越一天的界限,那么这样的事情可能会有所帮助:

TimeSpan start = TimeSpan.Parse("22:00"); // 10 PM
TimeSpan end = TimeSpan.Parse("02:00");   // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;


if (start <= end)
{
// start and stop times are in the same day
if (now >= start && now <= end)
{
// current time is between start and stop
}
}
else
{
// start and stop times are in different days
if (now >= start || now <= end)
{
// current time is between start and stop
}
}

请注意,在这个示例中,时间边界是包含在内的,并且这仍然假设 startstop之间的差异小于24小时。

使用 Linq 我们可以通过以下方式简化这个过程

 Enumerable.Range(0, (int)(to - from).TotalHours + 1)
.Select(i => from.AddHours(i)).Where(date => date.TimeOfDay >= new TimeSpan(8, 0, 0) && date.TimeOfDay <= new TimeSpan(18, 0, 0))

处理日间分界案件是否会更简单? :)

TimeSpan start = TimeSpan.Parse("22:00");  // 10 PM
TimeSpan end = TimeSpan.Parse("02:00");    // 2 AM
TimeSpan now = DateTime.Now.TimeOfDay;


bool bMatched = now.TimeOfDay >= start.TimeOfDay &&
now.TimeOfDay < end.TimeOfDay;
// Handle the boundary case of switching the day across mid-night
if (end < start)
bMatched = !bMatched;


if(bMatched)
{
// match found, current time is between start and end
}
else
{
// otherwise ...
}

一个简单的扩展函数:

public static bool IsBetween(this DateTime now, TimeSpan start, TimeSpan end)
{
var time = now.TimeOfDay;
// Scenario 1: If the start time and the end time are in the same day.
if (start <= end)
return time >= start && time <= end;
// Scenario 2: The start time and end time is on different days.
return time >= start || time <= end;
}
 using System;


public class Program
{
public static void Main()
{
TimeSpan t=new TimeSpan(20,00,00);//Time to check


TimeSpan start = new TimeSpan(20, 0, 0); //8 o'clock evening


TimeSpan end = new TimeSpan(08, 0, 0); //8 o'clock Morning


if ((start>=end && (t<end ||t>=start))||(start<end && (t>=start && t<end)))
{
Console.WriteLine("Mached");
}
else
{
Console.WriteLine("Not Mached");
}


}
}

我们不希望我们的服务在晚上运行。 因此,我们创建了这个条件来检查当前时间在时间窗口9点(今天)和1点(第二天) :

if (DateTime.Now > DateTime.Now.Date && DateTime.Now <= DateTime.Now.Date.AddHours(1.00) ||
DateTime.Now >= DateTime.Now.Date.AddHours(9))
{
// Current Time is within specified time window.
}

检查了四次

public static void GetTime()
{
var dt =  DateTime.Now;
int hours = dt.Hour;
int min = dt.Minute;


if (hours >= 1 && hours <= 12)
{
//Good Morning
}
else if (hours >= 12 && hours <= 16)
{
//Good Afternoon
}
else if (hours >= 16 && hours <= 21)
{
//Good Evening
}
else if (hours >= 21 && hours <= 24)
{
//Good Night
}
}