Techniczna dokumentacja pythonowych API nie jest typowym miejscem dla wzmianek dotyczących historii Polski. Dlatego poniższy fragment (z dokumentacji biblioteki pytz) jest dość zaskakujący:
… in 1915 Warsaw switched from Warsaw time to Central European time with no daylight savings transition. So at the stroke of midnight on August 5th 1915 the clocks were wound back 24 minutes creating an ambiguous time period that cannot be specified without referring to the timezone abbreviation or the actual UTC offset. In this case midnight happened twice, neither time during a daylight saving time period. …
Rozporządzenie
Rzecz nawiązuje do wydarzeń z pierwszej wojny światowej. 4 sierpnia 1915 wojska rosyjskie opuściły Warszawę, natomiast 5 sierpnia 1915 wkroczyły do niej wojska niemieckie i wprowadziły swoje porządki.
Po zajęciu miasta generał von Scheffer-Boyadel opublikował 5 sierpnia 1915 roku następujące rozporządzenie (pierwotnie było rozwieszone na ścianach domów i słupach ogłoszeniowych, ja kopiuję je za wydaniem Kurjera Warszawskiego z 7 sierpnia 1915).
Poza mianowaniem prezydenta miasta, zakazem zebrań czy nakazem wymordowania wszystkich gołębi pocztowych, był tam również ostatni punkt:
13. Środkowo-europejski czas, późniejszy o 24 minuty od czasu warszawskiego, wprowadza się z dniem dzisiejszym. Wszelkie zegary, znajdujące się na gmachach publicznych, placach i ulicach, muszą wskazywać czas środkowo-europejski.
I w ten sposób przyszła stolica Polski uzyskała zegar, który zachowała po odzyskaniu niepodległości i którym posługuje się do dzisiaj (czas w całej Polsce formalnie uporządkowała ustawa z 1922 roku, wprowadzająca czas środkowo-europejski na terenie całego kraju, później jedynymi zmianami w tej kwestii było kilkakrotne wprowadzanie i odwoływanie wiosenno-jesiennej zmiany czasu w PRL oraz przesuwanie jej daty).
Miasta zaborów pruskiego i austriackiego, takie jak Poznań czy Kraków, posługiwały się czasem środkowo-europejskim nieco dawniej (w Prusach i Austrii został wprowadzony w latach 1891-1893, głównie pod naciskiem kolei potrzebujących sensownego jednolitego zegara do publikacji rozkładów jazdy).
Czas warszawski
No dobrze, a skąd owe 24 minuty?
Do momentu powyższej zmiany, Warszawa posługiwała się czasem słonecznym, wynikającym z jej długości geograficznej. Ten miał długa historię i pierwotnie wynikał po prostu z używania naturalnie kalibrowanych zegarów słonecznych.
Carska Rosja prowadziła pewne działania nad porządkowaniem zegarów (czas moskiewski wprowadzono w 1880) ale do wybuchu I wojny światowej nie objęły one całego imperium, systematyczny podział kraju na formalne strefy czasowe nastąpił dopiero w pierwszych latach ZSRR.
Wracając do informatyki
O warszawskiej zmianie czasu wie biblioteka standardowa Linuksa. Przykład (tu przy pomocy perla ale podobny można uzyskać kodem w C):
$ perl -le 'print scalar localtime -1717032240'
Wed Aug 4 23:36:00 1915
$ perl -le 'print scalar localtime -1717032241'
Wed Aug 4 23:59:59 1915
Pełnię wynikających z niej subtelności ilustruje natomiast przykład zaczerpnięty z wspominanej już dokumentacji pytz (gdzie na jej potrzeby nieco nadużyto pojęcie zmiany czasu by odróżnić momenty przed i po jej wprowadzeniu).
>>> warsaw = pytz.timezone('Europe/Warsaw')
>>> amb_dt1 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=True)
>>> amb_dt1.strftime(fmt)
'1915-08-04 23:59:59 WMT+0124'
>>> amb_dt2 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=False)
>>> amb_dt2.strftime(fmt)
'1915-08-04 23:59:59 CET+0100'
>>> switch_dt = warsaw.localize(datetime(1915, 8, 5, 00, 00, 00), is_dst=False)
>>> switch_dt.strftime(fmt)
'1915-08-05 00:00:00 CET+0100'
>>> str(switch_dt - amb_dt1)
'0:24:01'
>>> str(switch_dt - amb_dt2)
'0:00:01'
Ciekawostki poboczne
Archiwa „Kurjera warszawskiego” są bardzo interesujące i warto je poprzeglądać. Bardzo specyficzne wrażenie zrobiło na mnie to z 5 sierpnia 1915. Wojna, trwające walki, odejście Rosjan, wejście Niemców … ale reklama musi być
(całe wydanie można znaleźć tutaj a inne po prostu nawigując w serwisie polona.pl).