Шаг 1 — Получить восход и закат (корректно)
- ✦Использовать часовой пояс локации (включая правила DST).
- ✦Использовать местную гражданскую дату, а не UTC.
Шаг 2 — Вычислить длины темпоральных часов
Пусть sunrise, sunset и nextSunrise — локальные времена.
dayLen = sunset - sunrise
nightLen = nextSunrise - sunset
dayHour = dayLen / 12
nightHour = nightLen / 12Шаг 3 — Построить 24 границы
- Дневной час i:
[sunrise + (i-1)*dayHour, sunrise + i*dayHour] - Ночной час j:
[sunset + (j-1)*nightHour, sunset + j*nightHour]
Шаг 4 — Назначить планетарных управителей
Используется халдейский порядок: Сатурн → Юпитер → Марс → Солнце → Венера → Меркурий → Луна (повтор).
- ✦Первый дневной час начинается с управителя дня недели.
- ✦Последовательность продолжается непрерывно через день и ночь (не сбрасывается в полночь).
Примечания по реализации
- ✦Корректно обрабатывать полярные случаи (нет восхода/заката).
- ✦Хранить границы с точностью до секунд, чтобы избежать дрейфа в UI.
- ✦Формат 12h/24h — только для отображения; расчёты ведутся в абсолютных метках времени.