【发布时间】:2014-10-03 21:00:06
【问题描述】:
我的表单上有一个计时器,间隔为 1000(1 秒)。我允许用户通过三个组合框输入时间。然后将他们输入的时间转换为 DateTime 格式。最后,如果输入时间等于DateTime.Now,计时器会检查每个刻度。问题是它不起作用。
假设我在晚上 8:59:50 时将闹钟设置为晚上 9:00:00。我单击开始并等待十秒钟让闹钟响起,但它从来没有响起。调试代码时,两个数字相同,这意味着它应该触发,但它没有。
这是我的代码:
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 包括小数秒。因此,在这种情况下,
==不能直接与它一起使用以获得有用的结果。 -
您需要将 DateTime 舍入为秒,然后进行比较,不要使用
==,而是使用>。那么即使你不四舍五入它也会起作用 -
成功了!谢谢大家!