Україна переходить на зимовий час у неділю, 25 жовтня 2026 року: о 04:00 за київським часом годинники переводять на 03:00. Київ повертається з літнього EEST (UTC+3) на стандартний EET (UTC+2), тож година з 03:00 до 03:59 цієї ночі минає двічі. Для сервісів, що живуть за київським часом, це означає дублі в логах, довшу добу у звітах і не завжди очевидну поведінку планувальників.

Звідки дата і година

Порядок задає постанова Кабміну № 509 від 13 травня 1996 року: стрілки переводять в останню неділю березня о 03:00 на годину вперед і в останню неділю жовтня о 04:00 на годину назад. Станом на жовтень 2026 року постанова чинна.

Закон про скасування сезонного переведення годинників (законопроєкт № 4201) Верховна Рада ухвалила 16 липня 2024 року, а 21 серпня 2024-го його передали на підпис Президентові. Станом на жовтень 2026 року картка законопроєкту не містить відмітки про підписання, тож годинники й далі переводять за постановою № 509.

У базі часових поясів IANA (tzdata), на яку спираються Linux, мови програмування і СУБД, зона Europe/Kyiv використовує загальноєвропейське правило EU: зміна відбувається о 01:00 UTC в останню неділю жовтня. У випуску tzdata 2026e від 29 вересня 2026 року це правило не змінювалося. Що знає ваша система, покаже команда zdump -v -c 2026,2027 Europe/Kyiv: у виводі має бути перехід 25 жовтня о 01:00 UT на 03:00 EET.

Cron: що запуститься двічі, а що ні

Класичні демони cron мають захист від повторного запуску, але лише для задач із конкретним часом. За документацією cron у Debian та Ubuntu, якщо годинник відкотився менш ніж на три години, задачі з повтореного проміжку вдруге не виконуються. cronie, стандартний для Fedora і RHEL, так само уникає подвійного запуску. На задачі із зірочкою в розкладі цей захист не поширюється:

  • «30 3 * * *» спрацює один раз, о 03:30 за літнім часом;
  • «*/10 3 * * *» замість шести запусків дасть дванадцять: задачі з * у полі хвилин чи годин (зокрема з кроком на кшталт */10) виконуються за новим часом;
  • щогодинні задачі пройдуть і о 03:xx EEST, і о 03:xx EET — у реальному часі між ними звичайна година, але в локальних логах це виглядатиме як дубль.

Найпростіше рішення — тримати планувальник в UTC. У cronie для цього є змінна CRON_TZ у crontab. У таймерах systemd пояс вказують прямо в OnCalendar, наприклад «*-*-* 01:30:00 UTC», а найближчі запуски показує systemd-analyze calendar --iterations=5. У Kubernetes CronJob без поля .spec.timeZone розклад рахується за місцевим часом kube-controller-manager. Бібліотеки-планувальники в застосунках поводяться по-різному, тож їхню реакцію на зміну часу перевірте в документації.

Логи, звіти і тривалість

  • Логи. Якщо час у записах локальний і без зсуву, рядки з 03:00 до 03:59 з’являться двічі, а сортування за текстом змішає дві різні години. Пишіть час в UTC або в ISO 8601 зі зсувом (+03:00 чи +02:00).
  • Звіти. 25 жовтня в Києві триває 25 годин. Агрегація за локальною годиною зведе дві години в один рядок «03», а добові ліміти й плани, розраховані на 24 години, розійдуться з фактом.
  • Тривалість. Зміна з 20:00 24 жовтня до 08:00 25 жовтня триває 13 годин, а не 12. У Python різниця двох datetime з однаковим tzinfo рахується без урахування зсуву і дасть саме 12, тому віднімайте значення в UTC. Для повтореної години в Python є атрибут fold: 0 означає перший прохід 03:30, 1 — другий.

Бази даних

У PostgreSQL тип timestamptz зберігає момент в UTC і перетворює його на пояс сесії лише під час виводу. Тип timestamp without time zone мовчки ігнорує вказівку поясу, тож два записи «03:30» з різних проходів години стануть нерозрізненими. Під час перетворення на timestamptz неоднозначний локальний час PostgreSQL трактує за зсувом, що діяв після переходу: «2026-10-25 03:30» у поясі Europe/Kyiv стане 03:30+02, навіть якщо подія сталася годиною раніше.

У MySQL тип TIMESTAMP конвертується в UTC під час запису, а DATETIME зберігається як є. Назви поясів на кшталт Europe/Kyiv MySQL розуміє, лише якщо завантажено таблиці часових поясів (mysql_tzinfo_to_sql); після оновлення tzdata їх перезавантажують і перезапускають сервер.

Europe/Kiev чи Europe/Kyiv

У tzdata 2022b (10 серпня 2022 року) зону Europe/Kiev перейменували на Europe/Kyiv. Стара назва лишилася посиланням для сумісності, правила в обох однакові. Проте системи з базою, давнішою за 2022b, як-от старі образи контейнерів чи JDK без оновлень, нової назви не знають. Перш ніж міняти конфіги, перевірте версію tzdata там, де працює код.

Чекліст до 25 жовтня

  1. З’ясуйте пояс серверів і контейнерів: timedatectl або змінна TZ.
  2. Знайдіть у crontab, таймерах і CronJob задачі на 03:00–04:00 за Києвом, особливо з кроком чи *.
  3. Переконайтеся, що моменти часу зберігаються в UTC або зі зсувом: timestamptz, TIMESTAMP, ISO 8601.
  4. Оновіть tzdata, а в MySQL — ще й таблиці поясів.
  5. Додайте тести з датою 25.10.2026: повторена година, доба на 25 годин, тривалість через перехід.
  6. Домовтеся з черговими фіксувати час інцидентів у ніч на 25 жовтня в UTC.

Інші практичні матеріали — у розділах «Розробка» і «Веб», довідкові статті — у «Довіднику».

Часті питання

Коли перехід на зимовий час у 2026 році?

У неділю, 25 жовтня 2026 року: о 04:00 за київським часом стрілки переводять на 03:00, і Україна переходить з UTC+3 на UTC+2.

Чи скасували переведення годинників в Україні?

Ні. Рада ухвалила закон за законопроєктом № 4201 ще в липні 2024 року, але станом на жовтень 2026-го Президент його не підписав, тож діє постанова Кабміну № 509.

Коли наступний перехід на літній час?

За чинними правилами — в останню неділю березня, тобто 28 березня 2027 року: о 03:00 стрілки переведуть на годину вперед.

Чи стосується перехід серверів в UTC?

Самого сервера — ні, в UTC немає літнього часу. Але код, що переводить час у київський для звітів, інтерфейсу чи сповіщень, перехід зачепить.