我在窗體上有一個計時器,間隔爲1000(1秒)。我允許用戶通過三個組合框輸入時間。他們輸入的時間然後轉換爲日期時間格式。最後,如果輸入時間等於DateTime.Now
,計時器會檢查每個記號。問題是它不工作。計時器在輸入匹配時沒有檢測到DateTime.Now
假設我在下午8:59:50時將鬧鐘設置爲9:00:00 PM。我點擊開始,然後等待十秒鐘,以便警報關閉,但它永遠不會。在調試代碼時,兩個數字都是相同的,這意味着它應該觸發,但它不會。
這裏是我的代碼:
private void tmrAlarm_Tick(object sender, EventArgs e) {
DateTime alarmTime = Convert.ToDateTime(statusAlarm.Text); // say statusAlarm.Text is 9:00:00 PM
if(alarmTime == DateTime.Now) {
MessageBox.Show("bzzt");
}
}
有沒有實現這一點(例如,計時秒而不是檢查它是否是一個正確的時間)的一個更好的辦法?我應該用秒錶嗎?
最後,它可能會失敗,因爲計時器是在一秒開始的,而不是一開始?就像我在1.05秒開始計時,而不是在第二秒。
編輯:
我改變了代碼如下:
if(alarmTime.Hour == DateTime.Now.Hour &&
alarmTime.Minute == DateTime.Now.Minute &&
alarmTime.Second == DateTime.Now.Second) { ... }
這是一個有點笨重的外觀,但它完美!
DateTime.Now包含小數秒。因此在這種情況下'=='不能直接用於有用的結果。 – user2864740
您需要將DateTime舍入爲秒,然後進行比較,而不是使用'==',而是使用'>'。那麼即使你沒有完成,它也可以工作 –
工作正常!感謝大家! – Abluescarab