Článek
Do buňky v Excelu se datum tváří jako datum, uvnitř je to ale číslo. V klasickém systému 1900 reprezentuje každý den pořadové číslo. Když se podíváme na úplný začátek tohoto kalendáře, narazíme na jeden z nejslavnějších historických kompromisů tabulkových procesorů: Excel zachází s rokem 1900, jako by byl přestupný.
Jenže v gregoriánském kalendáři přestupný nebyl. Rok dělitelný stem je přestupný pouze tehdy, pokud je zároveň dělitelný čtyřmi sty. Rok 1900 tuto podmínku nesplnil. Datum 29. února 1900 tedy nikdy nenastalo.
Tři čísla ukážou celý problém
Pro vlastní mini-dataset stačí tři sousední sériová čísla. Excel v systému 1900 zachází s hodnotou 59 jako s 28. 2. 1900, hodnotou 60 jako s 29. 2. 1900 a hodnotou 61 jako s 1. 3. 1900. Prostřední řádek je historická fikce vložená mezi dvě skutečná data.
Dataset proto vypadá jednoduše: 59 → 28. 2. 1900 → platné datum; 60 → 29. 2. 1900 → v gregoriánském kalendáři neexistuje; 61 → 1. 3. 1900 → platné datum. Na třech řádcích je vidět, že nejde o obecnou chybu počítání přestupných let, ale o konkrétní kompatibilitní výjimku na začátku systému.
Viníkem je Lotus 1-2-3, ale chyba se už nevyplatila opravovat
Microsoft ve své dokumentaci uvádí, že Lotus 1-2-3 při svém vzniku rovněž považoval rok 1900 za přestupný. Když přišel Multiplan a později Excel, Microsoft zachoval stejný sériový systém kvůli kompatibilitě s Lotusem. Historická chyba se tak stala součástí datového kontraktu.
Dnes by šlo matematicky říct „prostě den 60 smažme“. Prakticky by tím ale vznikl mnohem větší problém. Pořadová čísla obrovského množství starších dat by se posunula, výpočty a odkazy by se mohly rozbít a kompatibilita se starými soubory by utrpěla. Microsoft proto tuto zvláštnost výslovně ponechává.
Excel má ještě druhý kalendář a ten je posunutý o 1 462 dní
Kromě systému 1900 existuje také systém 1904, historicky používaný hlavně ve starších verzích Excelu pro Mac. Microsoft uvádí, že stejné datum má v těchto dvou systémech pořadové číslo rozdílné o 1 462 dní, tedy o čtyři roky a jeden den.
To už není kuriozita jen pro historiky softwaru. Když se mezi sešity s různými kalendářními systémy přenesou nekompenzovaná sériová čísla, datum se může posunout o celé roky. Proto je u starších nebo převáděných souborů důležité vědět, že „datum v Excelu“ není jen text na obrazovce.
Bug, který se stal součástí standardního chování
Na první pohled je absurdní, že moderní Excel stále umí reprezentovat neexistující den z roku 1900. Jenže právě to ukazuje jednu důležitou vlastnost dlouhověkého softwaru: kompatibilita někdy vyhraje nad čistotou. Chyba, kterou by dnes programátor opravil před vydáním, může po desetiletích fungovat jako závazné rozhraní pro miliardy buněk.
Sériová šedesátka je proto malý digitální fosilní otisk. Neexistující 29. únor 1900 v Excelu není proto, že by Microsoft nevěděl, jak funguje kalendář. Je tam proto, že tabulkový procesor už desítky let nechce rozbít svět, který na jeho starém kompromisu vyrostl.
Doporučená titulní fotografie: spreadsheet / laptop with spreadsheet (Pexels; před publikací vybrat konkrétní právně čistý snímek a uvést kredit autora fotografie).
Zdroje






