Изменение метки в зависимости от текущего времени - PullRequest
0 голосов
/ 17 ноября 2018

Здравствуйте. У меня проблема с тем, что мой ярлык не обновляется со временем. Это должно изменить номер в определенные промежутки времени, например. в 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";
    }
}

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Как уже упоминали другие, ваши условия установлены так, что они никогда не могут быть истинными: минуты не могут быть больше 40 И меньше 25.

Чтобы исправить ваш код как есть, вам нужно сгруппировать условия, чтобы вы сравнивали пары часов и минут, где пары оцениваются первыми:

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

Однако вы можете рассмотреть использование метода TimeSpan.Parse (или метода DateTime.Parse вместе со свойством TimeOfDay) для сравнения времени, например, как показано ниже, что, я думаю, более читабельно.

Я смешал использование TimeSpan.Parse и DateTime.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)
0 голосов
/ 17 ноября 2018

Ваши условия всегда ложные, возьмем это, например:

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

Minute >= 40 && Minute <= 25 всегда будет ложным, так как один из них может быть истинным одновременно. Я думаю, что вы ищете что-то вроде:

if ((Hour = 6 && Minute >= 40) || (Hour = 7 && Minute <= 25))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...