Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
-7 / 20 / 7
Регистрация: 19.02.2012
Сообщений: 411
1

Сравнение времени DateTime.Now.Hour

12.01.2018, 00:12. Просмотров 2310. Ответов 6
Метки нет (Все метки)

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
 
 
               foreach (Label item in groupBox1.Controls.OfType<Label>())
                {
                    int h = DateTime.Now.Hour;
                    if (h > 8 && h < 18)
                    {
                        item.BackColor = Color.Green;
                    }
                    else 
                    {
                        item.BackColor = Color.Red;
                    }
                    
            label1.Text = System.DateTime.Now.AddHours(-5)("HH:mm:ss");
 
            label2.Text = System.DateTime.Now.AddHours(-10)("HH:mm:ss");
 
            label3.Text = System.DateTime.Now.AddHours(+8)("HH:mm:ss");
 
            label4.Text = System.DateTime.Now.AddHours(-2)("HH:mm:ss");
 
 
                }


Добрый день. Как правильно получить время, у каждого лейбла свой час. И вставить этот час в условие. И проверить. Работает он или нет. Если падает в условие от 8:00 до 18:00 то зелёный, если нет то красный.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2018, 00:12
Ответы с готовыми решениями:

Сравнение DateTime - Почему сравнение запаздывает на 1 мин
public DateTime NextShort(DateTime cur, int ofset, int period) { var temp =...

Сравнение в DateTime
DateTime time = DateTime.Now; int h = time.Hour; if (s &gt;= 18 &amp;&amp; s &lt; 00) { TextBox1.Text =...

Извлечение даты и времени из DateTime
Есть 3 переменные типа DateTime, как взять дату из первой, время из второй, и получить третью?

Сравнение даты в строковом представлении с датой в виде datetime
Всем рривет! Возможно кто то сталкивался с такой проблемой когда надо сравнить две даты но одна...

6
2305 / 1689 / 900
Регистрация: 14.08.2016
Сообщений: 5,839
12.01.2018, 00:56 2
опиши задачу целиком... тут у тебя сначала установка фона, а потом запись в виде текста в лейбл значений времени с поправкой(видимо на часовой пояс), и то, с ошибкой, с которой даже не скомпилируется
0
-7 / 20 / 7
Регистрация: 19.02.2012
Сообщений: 411
12.01.2018, 01:11  [ТС] 3
Если время от 8:00 до 18:00 то зелёный фон у лейбла, если нет, то красный. И у каждого лейбла свой часовой пояс.
0
Модератор
1273 / 994 / 195
Регистрация: 22.03.2015
Сообщений: 6,031
Записей в блоге: 3
12.01.2018, 08:39 4
imcavs™, простой пример, думаю сообразите:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//начало интервала в часах
            var start = TimeSpan.Parse("08:00");
            //окончание интервала в часах
            var end = TimeSpan.Parse("18:00");
 
            //Можно задать смещение в часовом поясе, 
            //прибавляя значение из лейбла
            // текущее время для сравнения
            var now = DateTime.Now.TimeOfDay;
            //смещение часового пояса
            now = now.Add(TimeSpan.FromHours(-3));
            //если время попадает в интервал
            if(start <= now & now <= end)
            {
                Console.WriteLine("Попали в интервал");
            }
            else
            {
                Console.WriteLine("Дата не входит в интервал");
            };
0
653 / 213 / 81
Регистрация: 09.01.2018
Сообщений: 458
12.01.2018, 18:04 5
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            UpdateLabels();
        }
 
        Random rnd = new Random();
        private void SetLabelsValues()
        {
            var labels = Controls.OfType<Label>();
            foreach (var lbl in labels)
            {
                lbl.Tag = DateTime.Now.AddHours(rnd.NextDouble() * 10);
                lbl.Text = ((DateTime)lbl.Tag).ToShortTimeString();
            }
        }
 
        private void SetLabelsColors()
        {
            var labels = Controls.OfType<Label>();
            foreach (var lbl in labels)
            {
                int hour = ((DateTime)lbl.Tag).Hour;
                lbl.ForeColor = hour > 8 && hour < 18 ? Color.Green : Color.Red;
 
                lbl.Font = new Font("Microsoft Sans Serif", 14.0f, FontStyle.Bold);
 
            }
        }
 
        private void UpdateLabels()
        {
            SetLabelsValues();
            SetLabelsColors();
        }
 
        private void buttonUpd_Click(object sender, EventArgs e)
        {
            UpdateLabels();
        }
    }
0
-7 / 20 / 7
Регистрация: 19.02.2012
Сообщений: 411
13.01.2018, 19:31  [ТС] 6
escoult,
Это конкретно для каждого часового пояса. Обобщить в одно условие не выйдет? Если все пояса засунуть в свой GroupBox. Затем вызвать все эти Controls.OfType<GroupBox>();
Как Вы думаете?
0
653 / 213 / 81
Регистрация: 09.01.2018
Сообщений: 458
13.01.2018, 23:13 7
Лучший ответ Сообщение было отмечено imcavs™ как решение

Решение

imcavs™, С часовыми поясами можно обойтись и одним методом.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            SetLabels();
        }
 
        //массив поправок на часовые пояса
        double[] timeZoneOffsets = new double[] 
        {
            -12, -11, -10, -9, -8, -7, -6, -5, -4, -3.5, -3, -3, -1, 0,
            1, 2, 3, 3.5, 4, 4.5, 5, 5.5, 5.75, 6, 6.5, 7, 8, 8.5, 8.75,
            9, 9.5, 10, 10.5, 11, 12, 12.75, 13, 14
        };
 
        private void SetLabels()
        {
            //очищаем панель
            flowLayoutPanel_LabelsTimes.Controls.Clear();
 
            //перебираем массив поправок и динамически добавляем лейблы на панель
            foreach (var offset in timeZoneOffsets)
            {
                var time = DateTime.Now.AddHours(offset);
                var hour = time.Hour;
 
                Label lbl = new Label();
                lbl.Text = time.ToShortTimeString();
 
                lbl.ForeColor = hour > 8 && hour < 18 ? Color.Green : Color.Red;
                lbl.Font = new Font("Microsoft Sans Serif", 14.0f, FontStyle.Bold);
 
                lbl.Margin = new Padding(24, 6, 6, 8);
                flowLayoutPanel_LabelsTimes.Controls.Add(lbl);
            }
        }
 
        private void button_Update_Click(object sender, EventArgs e)
        {
            SetLabels();
        }
    }
При желании можно заменить массив на словарь, добавить к поправкам названия часовых поясов. Так что, это просто была демострация, как
Цитата Сообщение от imcavs™ Посмотреть сообщение
правильно получить время, у каждого лейбла свой час. И вставить этот час в условие. И проверить.
0
Миниатюры
Сравнение времени DateTime.Now.Hour  
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.01.2018, 23:13

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как вырезать или задать интервал времени в datetime
Как вырезать или задать интервал времени в datetime? Например мне нужно делать определенные...

Как извлечь только дату из DateTime (без времени)
Вообщем имеется переменная DateTime, например, 12.12.2012 00:00:00 Как преобразовать ее в String...

Сравнение времени
Перечитал много тем про преобразование строк в дату и немного запутался. Задача такая есть два...

Сравнение DateTime даже одинакового времени возвращает False
По каким-то непонятным причинам не получается сравнить два DateTime. Вот два примера: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.