首页 > 解决方案 > 根据当前时间更改标签

问题描述

您好,我遇到了一个问题,我的标签不会随时间更新。它应该以特定的时间间隔更改数字,例如。当它是上午 7:30 - 上午 8:15 时,它应该将标签文本更改为“1”。

这是负责此的代码:

public void Form1_Load(object sender, EventArgs e)
{
    timer1.Start();
    label2.Text = DateTime.Now.ToLongTimeString();
    label1.Text = DateTime.Now.ToLongDateString();
    this.FormBorderStyle = FormBorderStyle.None;
    this.WindowState = FormWindowState.Maximized;

public void timer1_Tick(object sender, EventArgs e)
{
    int Hour = DateTime.Now.Hour();
    int Minute = DateTime.Now.Minute();
    if (Hour >= 6 && Minute >= 40 && Hour <= 7 && Minute <= 25)
    {
        label5.Text = "0";
    }
    else if (Hour >= 7 && Minute >= 30 && Hour <= 8 && Minute <= 15)
    {
        label5.Text = "1";
    }
    else if (Hour >= 8 && Minute >= 20 && Hour <= 9 && Minute <= 5)
    {
        label5.Text = "2";
    else
    {
        label5.Text = "nothing";
    }
}

标签: c#winforms

解决方案


正如其他人所提到的,您的条件设置为永远不会为真:分钟永远不能大于 40 并且小于 25。

要按原样修复代码,您需要对条件进行分组,以便比较小时和分钟对,首先评估这些对:

if ((Hour >= 6 && Minute >= 40) && (Hour <= 7 && Minute <= 25))

但是,您可能会考虑使用该TimeSpan.Parse方法(或该DateTime.Parse方法与TimeOfDay属性)来比较时间,类似于以下内容,我认为它更具可读性。

我混合使用了TimeSpan.ParseDateTime.Parse所以你可以看到它们有什么不同。你应该只选择一个或另一个(尽管重要的是要注意 AM/PM 是美国文化的东西。如果你打算在其他文化中使用它,那么TimeSpan方法 + 24 小时时间是首选):

public void timer1_Tick(object sender, EventArgs e)
{
    TimeSpan currentTime = DateTime.Now.TimeOfDay;

    if (currentTime >= DateTime.Parse("6:40 AM").TimeOfDay &&
        currentTime <= DateTime.Parse("7:25 AM").TimeOfDay)
    {
        label5.Text = "0";
    }
    else if (currentTime >= TimeSpan.Parse("07:30") &&
             currentTime <= TimeSpan.Parse("08:15"))
    {
        label5.Text = "1";
    }
    else if (currentTime >= TimeSpan.Parse("08:20") &&
             currentTime <= TimeSpan.Parse("09:05"))
    {
        label5.Text = "2";
    }
    else
    {
        label5.Text = "nothing";
    }
}

请注意,如果使用TimeSpan.Parse,则必须使用 24 小时制。所以"2:00 PM"将表示为"14:00"。如果您不喜欢这样,请使用DateTime.Parse,然后调用该TimeOfDay属性:

// Instead of this
if (currentTime >= TimeSpan.Parse("18:40")

// You could write this
if (currentTime >= DateTime.Parse("6:40 PM").TimeOfDay)

推荐阅读