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

使用.NET 3.5

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

到目前为止,我有这个机会:

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

我正在消除如何获得时间范围转换和比较。 这会工作吗?

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

UPDATE1:谢谢大家的build议。 我不熟悉TimeSpanfunction。

为了检查一天的使用时间:

 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 } 

这里有一些很好的答案,但是没有一个涵盖了你的开始时间与结束时间不同的日子。 如果你需要跨越一天的边界,那么这样的事情可能会有所帮助:

 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小时。

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

如果你真的想把一个stringparsing成TimeSpan,那么你可以使用:

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

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

 TimeRange timeRange = new TimeRange(); timeRange = TimeRange.Parse("13:00-14:00"); bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay); Console.Write(IsNowInTheRange); 

这里是我使用TimeRange的例子

一个简单的小扩展function:

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

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 。 (值types不能有非空的默认值)您想使用DateTime.Now

你非常接近,问题是你比较DateTime和TimeOfDay。 你需要做的是将.TimeOfDay属性添加到您的Convert.ToDateTime()函数的末尾。

使用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 ... }