5 лет назад
Временные зоны
UTC, или Coordinated Universal Time, – это стандарт времени, принятый на Земле. От него идет отсчет часовых поясов. UTC было введено вместо устаревшего среднего времени по Гринвичу (Greenwich Mean Time, или GMT). При этом до сих пор можно часто встретить обозначение московского времени как GMT +3, хотя лично я больше предпочитаю простое Moscow time. Время по UTC не переводится ни зимой, ни летом. Но такое явление, как Daylight Saving Time (DST) в некоторых странах никто не отменял. В связи с этим...
06:44
1,0×
00:00/06:44
32,2 тыс смотрели · 3 года назад
8 месяцев назад
💡Ответ💡 Правильные варианты - со 2 по 7. При конвертации UTC -> UTC+3 добавляется 3ч ко всем строкам, поэтому период начинается с 21:00 (UTC) = 00:00 (UTC+3) и заканчивается тоже в 21:00, потому что в between самое крайнее время - это не конец дня, а начало дня: --это одинаковые условия BETWEEN '2024-02-24' AND '2024-02-25' BETWEEN '2024-02-24 00:00:00' AND '2024-02-25 00:00:00' Зачем? 🍊Как-то раз мне нужно было проверить, долетают ли данные из одной системы в другую. Но каунты тотально не сходились. Потом я увидела, что день начинался в 21:00 предыдущего дня и заканчивался в 20:59 текущего. Так, разница в 3 часа, значит, связано с конвертацией дат в UTC - но это было не совсем так! 😜Много времени на выяснение обстоятельств, а суть заключалась в использовании идешки. Я работала в DBeaver, а когда написала тот же запрос в PyCharm - даты отображались корректно, с 00:00 до 23:59. Возможно, во всем виноваты настройки, но так и не получилось с ними разобраться. PyCharm люблю всей душой👩‍💻 Код потестить (ClickHouse):CREATE TABLE dates ( `datetime` datetime('UTC') ) ENGINE = MergeTree() ORDER BY datetime; INSERT INTO dates VALUES ('2024-02-23 20:59:00'), ('2024-02-23 21:00:00'), ('2024-02-23 23:59:00'), ('2024-02-24 00:00:00'), ('2024-02-24 02:59:00'), ('2024-02-24 20:59:00'), ('2024-02-24 21:00:00'), ('2024-02-24 22:00:00'), ('2024-02-25 00:00:00'), ('2024-02-25 02:59:00'); SELECT toDateTime(`datetime`, 'Europe/Moscow'), CASE WHEN toDateTime(`datetime`, 'Europe/Moscow') BETWEEN '2024-02-24' AND '2024-02-25' THEN 1 ELSE 0 END AS flag FROM dates ORDER BY 1;