查看当前时间是否在某个时间范围内
使用.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 } }
请注意,在这个例子中,时间界限是包容性的,并且这仍然假定在start
和stop
之间的时间差小于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 ... }