Стартовая страница › Форумы › Понять, как работает ПО › Использование формул › Некорректная работа даты/времени.
- В этой теме 34 ответа, 3 участника, последнее обновление 4 месяца, 1 неделя назад сделано
Mikhail.
-
АвторСообщения
-
10.03.2025 в 08:28 #37158
manjey73УчастникВ настройках WEB вы так же можете выбрать время UTC.
Но по мне это неправильно. Web может запускаться из разных часовых зон.
Коммуникаторы могут работать в разных часовых зонах.Просто это добавило проблем, так как кроме времени из WEB не передается ничего.
А должна передаваться еще временная зона. К тому же у пользователя не должна болеть голова, как это все работает 🙂
и при написании драйверов, модулей она тоже болеть не должна.
Вот и начинаются танцы с бубнами.10.03.2025 в 14:28 #37165
MikhailМодераторДобрый день!
Сервер работает по времени UTC. Поэтому рекомендую работать, используя функцию
UtcNow()
По скриншоту:
— Входная формула канала 1 пересчитывается постоянно, что бессмысленно в данном случае. Канал 1 вообще не нужен, скорее всего.
— Входная формула в канале 2 не нужна. Выходная формула:SetVal(2, UtcNow())
— Входную формулу в канале 3 попробуйте:UtcNow() - Val(1)Канал 3 будет содержать вещественное число, равное доле от суток. Переведите его в минуты или секунды для удобного отображения.
-
Ответ изменён 8 месяцев назад пользователем
Mikhail.
10.03.2025 в 20:08 #37178timon84
УчастникМихаил, приветствую.
На скриншоте сделано все для понимания глубины проблемы, а так да, канал 1 не нужен.Если использовать UtcNow() — Отображается текущее время системы (что тоже не совсем корректно, как тогда вывести на экран время UTC?)
UtcNow()-Now() = 6:00:0010.03.2025 в 22:22 #37182
manjey73Участникотнять разницу между UTC и LocalTime и сохранить снова как UTC 🙂
Может еще какой бубен. Например открываем WEB, где LocalTime отличный от LocalTime сервера и опять грабли 🙂Если формулы и расчеты только на сервере, то по первому варианту.
-
Ответ изменён 8 месяцев назад пользователем
manjey73.
10.03.2025 в 22:25 #37184timon84
Участник
между UTC и LocalTime и сохранить снова как UTC 🙂
Вот не работает. он ставит 6:00:00 и начинает уменьшать это время! Т.е. -6:00:00. Как это работает я вообще потерялся.
Твой кастыль с секундами еще не пробовал. Пока просто «скрыл» счетчик прошедшего времени, оставив только «время сброса».
Полностью все перевести на ЮТС тоже нельзя. На графиках нужна привязка к локальному времени.10.03.2025 в 23:01 #37185
manjey73УчастникВы не поняли. надо вычесть из UTC разницу. ТО есть время UTC = 0:0:0 Local в вашем случае 3:0:0, разница 3 часа, надо из UTC вычесть 3 часа и сохранить как 21:0:0 предыдущего дня.
Тогда вы увидите 0:0:0 но это тоже будет неверным решением, так как это не 0:0:0 по UTC а будет уже 0:0:0 по Москве.
попробуйте. Для отображения достаточно строки. А хранить TotalSeconds — по другому никак
11.03.2025 в 11:58 #37188
MikhailМодераторПросто посчитайте разницу между двумя точками времени и переведите её в минуты или секунды. Отображайте как число, а не как время. Часовой пояс вообще не важен при вычислении разницы. Вычисления в UTC выполняются быстрее по сравнению с локальным временем.
11.03.2025 в 12:51 #37193
manjey73УчастникТут больше вопрос к тому, что штатно нет Формата TimeSpan и в каком виде его отображать системой, типа в секундах, минутах, днях или во всем.
То есть Date and Time и Time есть, а TimeSpan (Интервал) не подвезли. 🙂
12.03.2025 в 15:43 #37222timon84
УчастникВы не поняли. надо вычесть из UTC разницу. ТО есть время UTC = 0:0:0 Local в вашем случае 3:0:0, разница 3 часа, надо из UTC вычесть 3 часа и сохранить как 21:0:0 предыдущего дня.
Тогда вы увидите 0:0:0 но это тоже будет неверным решением, так как это не 0:0:0 по UTC а будет уже 0:0:0 по Москве.
попробуйте. Для отображения достаточно строки. А хранить TotalSeconds — по другому никак
Я понял, пробовал. Не работает это. Т.к. и так почти в нуле. И когда отнимаем — полечается совсем все плохо. Перефодить Вэб на UTC помогает с этой задачей, но все графики и т.д. тоже становятся по UTC, а нужно по Локальному. вот и остается только какие-нибудь костыли с пересчетом из секунд.
13.03.2025 в 15:01 #37250
MikhailМодераторКакое вещественное число получается при вычислении разницы?
13.03.2025 в 15:29 #37255
manjey73Участник@mikhail там при нажатии 0 и последующее увеличение. Нажатие это время наступления события.
Пример с секундами у меня работает. то есть можно поменять в канале 3 формулу. И добавив формулу в канал 4 отображать текстом на мнемосхеме.
А было бы куда удобнее просто создать канал и указать ему Формат Интервал (TimeSpan)
Правда оказалось что TimeSpan просто так не перевести во время в формате double. Нужно в секунды переводить.14.03.2025 в 11:54 #37269
MikhailМодераторпросто создать канал и указать ему Формат Интервал (TimeSpan)
Такое пожелание было раньше, оно записано.
26.06.2025 в 10:37 #39190timon84
УчастникВ продолжение вышеописанного, новый «интересный момент» возможно затрагивался в других ветках.
Т.к. работает система в UTC а вэб сервер лепит разницу во времени, то все что касается времени в промежутке между UTC и LocalTime работает не совсем корректно.
В Красноярске в промежуток времени с 00:00 до 06:59:59 при открытии графиков, открывается вчерашний день и нужно вручную переключать на сегодня и т.д.
На ДВ еще хуже с этим. пол дня приходится перетыкивать.Кто-то с этим сталкивался? как это решать?
-
Ответ изменён 4 месяца, 1 неделя назад пользователем
timon84.
26.06.2025 в 11:50 #39193
manjey73Участника время WEB выбрано? там в настройках Web сервера выбирается часовой пояс, по которому ему работать.
26.06.2025 в 14:12 #39194
MikhailМодераторСделайте, пожалуйста, скриншот открытого графика в этот промежуток времени. Проверим.
-
Ответ изменён 8 месяцев назад пользователем
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.