C#DateTime比较器从-1跳到1

时间:2016-05-03 18:09:31

标签: c# datetime time compare

基本上我正在尝试为项目编写闹钟(未评分)。出于某种原因,我的DateTime比较器会立即从-1跳到1,即使这些值应该相等。

这是因为它发生得太快还是因为我没有使用毫秒?

以下是我认为问题所在的代码片段(如果尚未设置,则alarmDate为null):

private void Timer_Tick(object sender, EventArgs e)
{
    lblTime.Content = DateTime.Now.ToLongTimeString();

    if(alarmDate != null)
    {
        int result = DateTime.Compare(DateTime.Now, (DateTime)alarmDate.Value);

        lblTest.Content = alarmDate.Value.ToLongTimeString();
        lblTest2.Content = DateTime.Now.ToLongTimeString();

        if(result == 0)
        {
            lblWakeUp.Content = "Wake Up!!!!";
            SystemSounds.Beep.Play();
        }
    }
}

对不起,如果这是一个愚蠢的问题或错误,但我真的找不到答案。

提前致谢!

1 个答案:

答案 0 :(得分:4)

DateTime实际上具有大约16毫秒的精度,因此您有一个非常的短窗口,其中两个DateTime完全相等,并且您获得的DateTime值很可能永远等于特定值。我建议使用一个超过闹钟时间后触发的标志:

bool alarmTriggered = false;     // <-- new flag
private void Timer_Tick(object sender, EventArgs e)
{
    lblTime.Content = DateTime.Now.ToLongTimeString();

    if(alarmDate != null)
    {
        int result = DateTime.Compare(DateTime.Now, (DateTime)alarmDate.Value);

        lblTest.Content = alarmDate.Value.ToLongTimeString();
        lblTest2.Content = DateTime.Now.ToLongTimeString();

        if(result > 0 && !alarmTriggered)   // <-- check flag
        {
            alarmTriggered = true;          // <-- set the flag
            lblWakeUp.Content = "Wake Up!!!!";
            SystemSounds.Beep.Play();
        }
    }
}