# Время модельного дня Этот документ отвечает на вопрос, почему дата модельных суток не обязана совпадать с UTC-датой события. В коде встречаются три координаты времени: - D — номер дня на оси модельного времени; - `EventDate` — дата D в поясе счетчика; - `UTCEventTime` — абсолютная метка события. Местное время гостя задает форму активности внутри суток, а границу дня задает пояс счетчика. [`world.ORIGIN`](../../../generator/src/clickstream_generator/world.py) — D0 календарной оси: он переводит номер D в конкретную дату. Это не механизм часового пояса. Механизм — [`world.COUNTER_TIMEZONE_MINUTES`](../../../generator/src/clickstream_generator/world.py), смещение пояса счетчика от UTC. В [`day._columns`](../../../generator/src/clickstream_generator/day.py) `EventDate` получается как `ORIGIN + D`. Чтобы получить абсолютную полночь тех же суток, код вычитает смещение счетчика, а затем прибавляет секунды события внутри дня. Поэтому сутки `2026-06-01` в UTC+4 начинаются в `2026-05-31 20:00:00Z`: у первых четырех часов `toDate(UTCEventTime) != EventDate`. [`day._starts`](../../../generator/src/clickstream_generator/day.py) сначала выбирает час из городской строки весов, собранной [`day._hour_cumulative`](../../../generator/src/clickstream_generator/day.py), а затем равномерно выбирает секунду внутри часа. Строка поворачивает суточную волну на разницу между поясом гостя и поясом счетчика. Так вечерний пик гостя попадает в нужные часы внутри дня, но граница суток и `EventDate` остаются счетчиковыми. Как часовой пояс меняет представление времени в ClickHouse, описано в разделе «Часовые пояса» [документа о хранилище](../storage.md). Типы и публичный смысл полей записаны в [описании события](../../formats/clickstream-event.md). Выбор модели времени объясняет [ADR 0015](../../adr/0015-counter-timezone.md).