[英]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。
我假設start
和end
的類型為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
循環中主動等待。 也許訂閱了Timer
的Tick
事件。
從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.