簡體   English   中英

如何檢查當前時間是否介於時間范圍內?

[英]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,如何檢查當前時間是否在開始和停止之間。

對我來說棘手的部分是時間可以越過午夜邊界。

如果startTimeendTime表示單個時間間隔(它只發生一次, startTimeendTime表示開始/停止的日期和時間),那么就像說

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))

如果startTimeendTimeDateTime ,你可以說

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM