Некорректная работа даты/времени.

Просмотр 15 сообщений - с 16 по 30 (из 35 всего)
  • Автор
    Сообщения
  • #37158
    manjey73
    Участник

    В настройках WEB вы так же можете выбрать время UTC.
    Но по мне это неправильно. Web может запускаться из разных часовых зон.
    Коммуникаторы могут работать в разных часовых зонах.

    Просто это добавило проблем, так как кроме времени из WEB не передается ничего.
    А должна передаваться еще временная зона. К тому же у пользователя не должна болеть голова, как это все работает 🙂
    и при написании драйверов, модулей она тоже болеть не должна.
    Вот и начинаются танцы с бубнами.

    #37165
    Mikhail
    Модератор

    Добрый день!

    Сервер работает по времени UTC. Поэтому рекомендую работать, используя функцию UtcNow()
    По скриншоту:
    — Входная формула канала 1 пересчитывается постоянно, что бессмысленно в данном случае. Канал 1 вообще не нужен, скорее всего.
    — Входная формула в канале 2 не нужна. Выходная формула: SetVal(2, UtcNow())
    — Входную формулу в канале 3 попробуйте: UtcNow() - Val(1)

    Канал 3 будет содержать вещественное число, равное доле от суток. Переведите его в минуты или секунды для удобного отображения.

    • Ответ изменён 8 месяцев назад пользователем Mikhail.
    #37178
    timon84
    Участник

    Михаил, приветствую.
    На скриншоте сделано все для понимания глубины проблемы, а так да, канал 1 не нужен.

    Если использовать UtcNow() — Отображается текущее время системы (что тоже не совсем корректно, как тогда вывести на экран время UTC?)
    UtcNow()-Now() = 6:00:00

    #37182
    manjey73
    Участник

    отнять разницу между UTC и LocalTime и сохранить снова как UTC 🙂
    Может еще какой бубен. Например открываем WEB, где LocalTime отличный от LocalTime сервера и опять грабли 🙂

    Если формулы и расчеты только на сервере, то по первому варианту.

    • Ответ изменён 8 месяцев назад пользователем manjey73.
    #37184
    timon84
    Участник

    между UTC и LocalTime и сохранить снова как UTC 🙂

    Вот не работает. он ставит 6:00:00 и начинает уменьшать это время! Т.е. -6:00:00. Как это работает я вообще потерялся.
    Твой кастыль с секундами еще не пробовал. Пока просто «скрыл» счетчик прошедшего времени, оставив только «время сброса».
    Полностью все перевести на ЮТС тоже нельзя. На графиках нужна привязка к локальному времени.

    #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 — по другому никак

    #37188
    Mikhail
    Модератор

    Просто посчитайте разницу между двумя точками времени и переведите её в минуты или секунды. Отображайте как число, а не как время. Часовой пояс вообще не важен при вычислении разницы. Вычисления в UTC выполняются быстрее по сравнению с локальным временем.

    #37193
    manjey73
    Участник

    Тут больше вопрос к тому, что штатно нет Формата TimeSpan и в каком виде его отображать системой, типа в секундах, минутах, днях или во всем.

    То есть Date and Time и Time есть, а TimeSpan (Интервал) не подвезли. 🙂

    #37222
    timon84
    Участник

    Вы не поняли. надо вычесть из 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, а нужно по Локальному. вот и остается только какие-нибудь костыли с пересчетом из секунд.

    #37250
    Mikhail
    Модератор

    Какое вещественное число получается при вычислении разницы?

    #37255
    manjey73
    Участник

    @mikhail там при нажатии 0 и последующее увеличение. Нажатие это время наступления события.

    Пример с секундами у меня работает. то есть можно поменять в канале 3 формулу. И добавив формулу в канал 4 отображать текстом на мнемосхеме.

    А было бы куда удобнее просто создать канал и указать ему Формат Интервал (TimeSpan)
    Правда оказалось что TimeSpan просто так не перевести во время в формате double. Нужно в секунды переводить.

    #37269
    Mikhail
    Модератор

    просто создать канал и указать ему Формат Интервал (TimeSpan)

    Такое пожелание было раньше, оно записано.

    #39190
    timon84
    Участник

    В продолжение вышеописанного, новый «интересный момент» возможно затрагивался в других ветках.

    Т.к. работает система в UTC а вэб сервер лепит разницу во времени, то все что касается времени в промежутке между UTC и LocalTime работает не совсем корректно.

    В Красноярске в промежуток времени с 00:00 до 06:59:59 при открытии графиков, открывается вчерашний день и нужно вручную переключать на сегодня и т.д.
    На ДВ еще хуже с этим. пол дня приходится перетыкивать.

    Кто-то с этим сталкивался? как это решать?

    • Ответ изменён 4 месяца, 1 неделя назад пользователем timon84.
    #39193
    manjey73
    Участник

    а время WEB выбрано? там в настройках Web сервера выбирается часовой пояс, по которому ему работать.

    #39194
    Mikhail
    Модератор

    Сделайте, пожалуйста, скриншот открытого графика в этот промежуток времени. Проверим.

Просмотр 15 сообщений - с 16 по 30 (из 35 всего)
  • Для ответа в этой теме необходимо авторизоваться.