簡體   English   中英

如何檢查當前時間是否在特定時間范圍內?

[英]How to check if the current time falls in a particular range of time?

我想創建一個觸發器。 我提供兩個輸入。 a)開始時間b)結束時間。

我想連續檢查當前時間是否介於開始時間和結束時間之間。 然后在0(不在范圍內)和1(在范圍內)之間切換全局變量的值。

但是我需要每秒鍾檢查一次。

我現在正在做什么

while (true)
{
    now_hrs = Convert.ToInt32(DateTime.Now.Hour);
    now_min = Convert.ToInt32(DateTime.Now.Minute);

    if (now_hrs >= start_hrs && now_hrs <= end_hrs)
    {
        if (now_hrs == start_hrs && now_min < start_min)
        {

        }
        else if (now_hrs == end_hrs && now_min > end_min)
        {

        }
        else
        {
            alert_trigger = 1;
        }
    }
}

但是我什么也沒收到,程序掛起了。

還有其他方法可以檢查當前時間是否在該范圍內

要么

在開始時間和結束時間之間將alert_trigger的值更改為1,否則將其更改為0。

我假設startend的類型為DateTime

while(true)
{
    DateTime now = DateTime.Now;
    alert_trigger = (now > start && now < end) ? 1 : 0;
}

干杯

使用TimeSpan而不是DateTime

var start = new TimeSpan(7, 0, 0); // your start time
var end = new TimeSpan(15, 0, 0);   // your end time

while(true)
{
    var now = DateTime.Now.TimeOfDay;

    if (now <= end && now >= start)
    {
        alert_trigger = 1
    }
}   

另外,考慮另一種解決方案,但在while循環中主動等待。 也許訂閱了TimerTick事件。

DateTime.compare使用

private void compareTime(DateTime start, DateTime end)
{
    DateTime cur = DateTime.Now;
    if(DateTime.compare(cur, start)>0 && DateTime.compare(cur, end)<0)
        return 1;
    else
        return 0;
}

我將使用CompareTo方法:

DateTime start = DateTime.Today.AddHours(10).AddMinutes(15);
DateTime end = DateTime.Today.AddHours(10).AddMinutes(30);
DateTime now = DateTime.Now;

while(true)
{
    alert_trigger = (now.CompareTo(start) >= 0 && now.CompareTo(end) <= 0) ? 1 : 0;

如果開始時間和結束時間不包括在內,則可以減少為:

while(true)
{
    alert_trigger = (now.CompareTo(start) + now.CompareTo(end) = 0) ? 1 : 0;
}  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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