【问题标题】:C# - Alarm clock - Are two times the sameC# - 闹钟 - 两次相同
【发布时间】:2016-12-06 20:37:42
【问题描述】:

我正在通过 Windows 窗体用 C# 制作闹钟应用程序。到目前为止,我的时间检查器有这段非工作代码。

string alarm = this.dateTimePicker1.Text;

if (DateTime.Now.ToString() == alarm)
{
    MessageBox.Show("Alarm");
}

DateTimePicker 配置为小时、分钟和秒。上面的代码根本不显示消息框。 sn-p的问题在哪里?

还有:有没有更有效的方法来制作闹钟

【问题讨论】:

标签: c# datetime alarm


【解决方案1】:

试试这个让你开始:

需要比较小时和分钟。

private void CheckTime()
{
    clock.Text = DateTime.Now.ToString("hh:mm:ss");
    date.Text = DateTime.Now.ToLongDateString();
    DateTime alarm = this.dateTimePicker1.Value;
    DateTime currentTime = DateTime.Now;
    if (alarm.Hour == currentTime.Hour && alarm.Minute == currentTime.Minute)
    {
       timer1.Enabled = false;
       MessageBox.Show("Alarm");

    }
}

【讨论】:

  • 真的很好,停止计时器,防止大量消息框占据我的屏幕。
  • 这是一个非常简洁的答案,但没有解释它为什么起作用。 @trickrider2002,此答案有效,因为 DateTime.Now 将为您提供一个包含秒的值(可能还有毫秒,具体取决于它的使用方式)。它相当于比较几个浮点值。您需要将它们四舍五入到一些可以进行有意义比较的值。转换为小时和分钟就可以了。
【解决方案2】:

由于它是闹钟,因此您需要进行比较,包括时间。也就是说,比较 DateTime 对象的 .Ticks 值:

if(DateTime.Now.Ticks >= this.DateTimePicker1.Value.Ticks)
{
    // Sound the alarm
}

根据您使用的 DateTimePicker 的工作方式,您可能需要在比较之前检查 Value 是否为 null。

【讨论】:

  • 我不明白你为什么需要使用 Ticks,这应该足够了:DateTime.Now > this.DateTimePicker1.Value
  • 由于 Ticks 是 DateTime 对象的基值,因此它的效率更高一些,但您的方式也适用,并且在 OP 的应用程序中差异可以忽略不计。
【解决方案3】:

根据需要修改以下代码。我发现比较字符串是一种不好的方法。

DateTime alarm = this.dateTimePicker1.Value.Date;
if (DateTime.Compare(DateTime.Now.Date, alarm) == 0) { 
     MessageBow.Show("Alarm"); }

【讨论】:

  • 使用 DateTime.Compare 时不要忘记日期时间应该在同一时区中构建。所以要小心你的文化和 UICulture 设置。
  • @GeckoIT 非常真实!有一种方法可以指定文化和 UIculture 设置。我不会编写他需要的确切代码,但会为所述人提供一种解决方法(我认为这是人们最好的学习方式)。但你提出了一个很好的观点,绝对值得警惕
  • 我想你想要> 0,而不是== 0
  • msdn.microsoft.com/en-us/library/…> "零 t1 与 t2 相同。"这取决于他如何使用他的方法。这将检查两者是否相同。如果 datetime.now.date 在警报之后(> 0)则不是
  • 它会向下检查到最近的刻度(100 纳秒),所以这几乎总是会错过警报。
【解决方案4】:

问题是您正在寻找完全匹配。相反,您应该查看警报时间是否已过(因此 ">=")。此外,字符串比较不适用于日期时间。您需要比较日期/时间:

        string alarm = this.dateTimePicker1.Value;
        if (DateTime.Now() >= alarm)
        {
            MessageBox.Show("Alarm");
        } 

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多