[英]How can I check if the current time is between in a time frame?
我有一項服務,用戶可以配置為在“非高峰”時段運行。 他們可以設置服務可以運行的時間范圍。
例如:
用戶A上午8點至下午5點工作,因此他們希望安排應用程序在下午5:30至7:30之間運行。
用戶B工作時間為晚上9點至早上6點,因此他們安排應用程序在早上6:30到晚上8:30之間運行。
關鍵是應用程序使用他們的計算機而不是。
給定當前時間的DateTime,開始的DateTime和停止時間的DateTime,如何檢查當前時間是否在開始和停止之間。
對我來說棘手的部分是時間可以越過午夜邊界。
如果startTime
和endTime
表示單個時間間隔(它只發生一次, startTime
和endTime
表示開始/停止的日期和時間),那么就像說
bool isTimeBetween = someTime >= startTime && someTime <= endTime;
如果它是一個重復發生的事件(每天發生,在某個時間間隔內發生),您可以使用TimeOfDay
屬性進行比較。 (經常出現的案例是您必須考慮跨越午夜的開始/停止的情況)
static public bool IsTimeOfDayBetween(DateTime time,
TimeSpan startTime, TimeSpan endTime)
{
if (endTime == startTime)
{
return true;
}
else if (endTime < startTime)
{
return time.TimeOfDay <= endTime ||
time.TimeOfDay >= startTime;
}
else
{
return time.TimeOfDay >= startTime &&
time.TimeOfDay <= endTime;
}
}
(注意:此代碼假定如果start == end
,則它將涵蓋所有時間。您在另一篇文章上對此效果發表評論)
例如,檢查是否在凌晨5點到9點30分之間
IsTimeOfDayBetween(someTime, new TimeSpan(5, 0, 0), new TimeSpan(21, 30, 0))
如果startTime
和endTime
是DateTime
,你可以說
IsTimeOfDayBetween(someTime, startTime.TimeOfDay, endTime.TimeOfDay)
因此,我假設您想知道是否給出一天的開始時間和結束時間(不包括實際日期,即1/1/1900或類似的東西),看看是否有另一個時間與時間由開始和結束指定。 例如,如果開始時間是晚上9點,結束時間是早上9點,則接受晚上10點但拒絕上午10點。
你可以按照時間范圍類型(時間相等,結束是在開始之后,結束在開始之前)這樣做,這很簡單:
if (end==start) return true
else if (end>start) return start<=time && time<=end
else return !(time>end && time<start)
或者你可以擴展開始和結束的范圍,使得結束總是在開始之后如此:
if (end<=start) end += <24 hours>
if (time<start) time+= <24 hours>
return time<=end
我假設你在應用程序配置文件中保存了開始和結束時間,所以你基本上要做的就是讓你的應用程序在“開始時間”發生時將標志設置為“on”並將其設置為“off”當停止時間發生時。
這樣你就不必經常檢查“現在”是否在“開始和結束之間”時間。
if(當前> =開始&&當前<=停止)
(或沒有=)
我想這就是你需要的一切嗎?
午夜邊界是一個紅色的鯡魚 - 你需要知道的是兩個比較的狀態。
如果您以不同的方式處理周末,那么您還有其他邏輯,但基本比較很簡單。
DateTime t1;
t1 = DateTime.Now;
// loop inbetween start and end time
if (t1>=start_time &&t1<=end_time)
{
//your code / action
}
//if you are using sql to get values
start_time = Convert.ToDateTime(row.Cells[10].Text);
end_time = Convert.ToDateTime(row.Cells[11].Text);
//convert them to string or you will get some error!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.