[英]Find if current time falls in a time range
使用 .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:感謝大家的建議。 我不熟悉 TimeSpan function。
要檢查一天中的某個時間,請使用:
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 小時。
一個簡單的小擴展功能:
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;
}
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");
嘗試使用 C# 中的 TimeRange 對象來完成您的目標。
TimeRange timeRange = new TimeRange();
timeRange = TimeRange.Parse("13:00-14:00");
bool IsNowInTheRange = timeRange.IsIn(DateTime.Now.TimeOfDay);
Console.Write(IsNowInTheRange);
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
。
您非常接近,問題是您將 DateTime 與 TimeOfDay 進行比較。 您需要做的是將 .TimeOfDay 屬性添加到 Convert.ToDateTime() 函數的末尾。
這對於處理日邊界情況會更簡單嗎? :)
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 ...
}
我們不希望我們的服務在夜間運行。 所以我們創建了這個條件來檢查當前時間在上午 9 點(今天)和 1 點(第二天)的時間 window 內:
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.
}
4次檢查
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
}
}
使用 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))
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");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.