Do treści
~/cosnaczasie 35 wpisów ostatni: Gdańsk, PL
Menu

W firmie wpis #036

W nocy z 24 na 25 października jedna godzina zdarzy się dwa razy

O trzeciej w nocy zegarki cofną się na drugą i godzina między drugą a trzecią wydarzy się dwa razy. Dla ludzi to dodatkowa godzina snu. Dla programów, które planują coś na 2:30, to co roku mała zagadka, a w poniedziałek rano lista rzeczy do sprawdzenia.

5 min czytania

Zegar pokazujący pierwszą w nocy na ciemnym biurku

W tę niedzielę, 25 października, o trzeciej w nocy zegarki w Polsce cofną się na drugą. Przechodzimy z czasu letniego na zimowy, z UTC+2 na UTC+1. Telefon i komputer zrobią to same, piekarnik nie, a ja jak co roku dostanę w poniedziałek rano kilka wiadomości w stylu „coś jest dziwnego w raporcie”.

Spróbuję wyjaśnić bez żargonu, dlaczego jedna przestawiona godzina potrafi narobić bałaganu w programach, które na co dzień działają bez zarzutu.

Godzina, która ma dwie wersje

Zwykle każda godzina na zegarku zdarza się raz na dobę. W nocy z 24 na 25 października będzie inaczej. Najpierw minie 2:15 czasu letniego. Potem o 3:00 zegar wróci do 2:00 i za kwadrans znów będzie 2:15, tym razem czasu zimowego.

Człowiek tego nie zauważy, bo śpi. Program, który zapisuje „2:15” bez żadnej dodatkowej informacji, ma problem: nie wie, o którą z dwóch chodzi. A jeśli coś miało się wydarzyć o 2:30, to pytanie brzmi, czy wydarzy się raz, dwa razy, czy w ogóle.

Odwrotna sytuacja jest wiosną. W ostatnią niedzielę marca godzina między drugą a trzecią w ogóle nie istnieje. Zadanie zaplanowane na 2:30 nie ma kiedy się uruchomić.

Trzy rzeczy, które psują się co roku

Zadania zaplanowane w nocy. Serwery mają harmonogramy: o tej i o tej godzinie zrób kopię, wyślij raport, zamknij dzień w kasie. Programiści lubią noc, bo wtedy nikt nie pracuje. Tyle że noc to też pora zmiany czasu. To, czy zadanie z 2:30 uruchomi się w październiku raz czy dwa razy, zależy od systemu i jego ustawień. Raport wysłany podwójnie to drobiazg. Gorzej, jeśli podwójnie wykona się coś, co nalicza, wysyła albo pobiera pieniądze.

Logi, czyli dziennik programu. Każdy porządny system zapisuje, co robił i kiedy. Jeśli zapisuje czas lokalny, w nocy zmiany czasu pojawią się dwa wpisy z tą samą godziną, które naprawdę dzielą sześćdziesiąt minut. Kto potem szuka błędu, widzi zdarzenia ułożone w złej kolejności i traci godzinę na zagadkę, której nie ma.

Czas trwania liczony z zegarka. Ktoś zaczął zmianę o 22:00 i skończył o 6:00. Zegarek mówi: osiem godzin. W rzeczywistości w tę noc minęło dziewięć. Program, który liczy różnicę dwóch godzin lokalnych, pomyli się o godzinę, i to w rozliczeniu, w którym ludzie bardzo dokładnie liczą swoje godziny.

Jak to się robi porządnie

Jest jedna zasada, którą słyszy każdy początkujący programista i którą każdy kiedyś łamie: w środku systemu trzymaj czas uniwersalny, UTC. UTC nie ma czasu letniego ani zimowego, płynie równo przez cały rok. Na czas lokalny zamienia się go dopiero wtedy, gdy trzeba coś pokazać człowiekowi.

Kod na monitorze w ciemnym pokoju, zbliżenie

Druga zasada: jeśli już zapisujesz czas lokalny, zapisz go z przesunięciem. „2:15+02:00” i „2:15+01:00” to dwie różne chwile i każdy program to rozumie.

Trzecia: nocnych zadań nie planuje się na godzinę między drugą a trzecią. U nas w firmie, gdzie robimy aplikacje dla handlu, nocne raporty sprzedaży chodzą o 4:00. Kiedyś chodziły o 2:30. Raz w marcu jeden klient nie dostał raportu, raz w październiku dostał dwa. Od tamtej pory jest 4:00 i spokój.

Spotkania z ludźmi z innych krajów

Jest jeszcze pułapka kalendarzowa. Unia Europejska przestawia zegarki w ostatnią niedzielę października, a Stany Zjednoczone w pierwszą niedzielę listopada. W tym roku to 1 listopada. Przez ten tydzień różnica między Gdańskiem a Nowym Jorkiem wynosi pięć godzin zamiast sześciu.

Kalendarze w telefonie i w komputerze zwykle liczą to dobrze, bo każde spotkanie mają zapisane z prawdziwą strefą czasową. Problem pojawia się, kiedy ktoś umawia się w mailu na „15:00 u was”, a potem wpisuje to ręcznie. O porządku w kalendarzu zespołu pisałem przy kalendarzu i zadaniach w małym zespole i jedna rada stamtąd działa też tutaj: spotkanie z kimś z innej strefy zakłada ten, kto wysyła zaproszenie, a nie każdy u siebie osobno.

Poniedziałek w biurze wujka Leszka

W biurze rachunkowym wujka komputery przestawią się same. Ale w każdym małym biurze są urządzenia, które zegar mają własny i nikt ich nie pilnuje. Wysłałem wujkowi krótką listę na poniedziałek rano:

  • rejestrator kamer przy wejściu, bo nagranie z błędną godziną to kiepski dowód, gdyby był potrzebny,
  • drukarka z faksem, która drukuje datę i godzinę w nagłówku,
  • centrala telefoniczna albo telefony stacjonarne, jeśli pokazują godzinę połączeń,
  • zegar na ścianie w recepcji, bo pani z recepcji i tak spojrzy najpierw na niego,
  • godziny w programie do rejestracji czasu pracy, jeśli ktoś w biurze był w nocy z soboty na niedzielę. U wujka nikt nie był, ale zapytałem.

Starsze komputery, które mają ręcznie ustawioną strefę czasową albo wyłączoną synchronizację czasu, też warto obejrzeć. Po wymianie dwóch maszyn, opisanej przy starym komputerze w biurze, takich już u wujka nie ma.

I w domu

Tu lista jest krótsza i bardziej zabawna:

  • zegar w aucie: w części samochodów przestawia się sam, w części trzeba szukać w instrukcji, która opcja w menu za to odpowiada,
  • piekarnik i mikrofalówka, które przez pół roku będą się spieszyć, jeśli nikt ich nie ruszy,
  • budzik z radiem, jeśli ktoś go jeszcze ma,
  • ciśnieniomierz taty.

Ten ostatni jest dla mnie najważniejszy. Tata mierzy ciśnienie rano i wieczorem, a nowy ciśnieniomierz z sierpnia zapisuje pomiary z datą i godziną. Lekarz ogląda potem tę historię. Jeśli zegar w aparacie zostanie na czasie letnim, poranny pomiar o siódmej będzie w pamięci zapisany jako ósma i za pół roku nikt nie będzie wiedział, dlaczego wyniki się „przesunęły”. Tata obiecał, że w niedzielę rano przestawi. Mama obiecała, że go dopilnuje, co w praktyce znaczy, że przestawi ona.

Dalej: Technologia w firmie

Czytaj dalej

Wszystko z tematu