Problem kalendarza męczy mnie już od dawna. Nasza cywilizacja wymyśliła najdziwniejszy system liczenia dni, na jaki było ją stać. Z faktem, że rok ma nieco ponad 365 dni, trzeba się jakoś pogodzić, ponieważ nie mamy na to wpływu. Ale kto, do licha, wymyślił, że te 365 dni należy podzielić na 12 nierównych miesięcy? I nałożyć na to podział na siedmiodniowe tygodnie?
Albo był to polityk, albo ktoś, kto ma nierówno pod sufitem!
Choć mam swoje pomysły, jak należałoby to zrobić lepiej, nie widzę możliwości ich wdrożenia. Ludzie wolą siedzieć w znanym sobie, śmierdzącym bagnie, niż trudzić się przenosinami do królewskich ogrodów…
Zająłem się więc optymalizacją zapisu dat w obecnym systemie. Zgodnie ze standardem ISO 8601 datę kalendarzową przedstawiamy za pomocą następującego ciągu znaków: YYYY-MM-DD (cztery cyfry reprezentujące numer roku od narodzin Chrystusa (0001-9999), myślnik, dwie cyfry reprezentujące numer miesiąca (01 … 12), myślnik i dwie cyfry reprezentujące numer dnia w miesiącu (01 … 31)). Myślniki wprowadzono po to, żeby dało się to jakoś przeczytać.
Już na pierwszy rzut oka widać, że wykorzystywanie dwóch znaków do zapisu liczb z zakresu 01 … 12, a nawet 01 … 31 jest szalenie nieefektywne. Jako programista doskonale czuję cyfry szesnastkowe od 0 do F (czyli reprezentujące dziesiętne liczby od 0 do 15), więc pomyślałem, że można byłoby trochę rozciągnąć ten zapis tak, żeby objął liczby od 0 do 31. Oto mój sposób:
0123456789 ABCDEFGHJK abcdefghjk mn (od 0 do 31)
Od razu widać, że „f” to 25. ;-)
Aby uniknąć dwuznaczności, pominąłem „i” oraz „l”, które lubią optycznie podszywać się pod „1”.
Zakres lat postanowiłem ograniczyć do przedziału 1800-2119, kolejne dekady ponumerować, tak jak dni miesiąca, a lata w dekadzie „normalnie” – cyframi od 0 do 9. Oto przykłady:
- 1800 = 00 (dekada zerowa, rok zerowy);
- 1801 = 01 (dekada zerowa, rok pierwszy);
- 1810 = 10 (dekada pierwsza, rok zerowy);
- 1899 = 99 (dekada dziewiąta, rok dziewiąty);
- 1900 = A0 (dekada dziesiąta, rok zerowy);
- 1966 = G6 (dekada szesnasta, rok szósty);
- 1999 = K9 (dekada dziewiętnasta, rok dziewiąty);
- 2000 = a0 (dekada dwudziesta, rok zerowy);
- 2014 = b4 (dekada dwudziesta pierwsza, rok czwarty);
- 2015 = b5 (dekada dwudziesta pierwsza, rok piąty);
- 2119 = n9 (ostatni rok reprezentowany w systemie).
Proste, no nie?
Też tak sądzę!
W ten sposób mogę zapisywać datę nie za pomocą dziesięciu, ale tylko 4 znaków YYMD:
- YY reprezentuje numer roku od 1800 do 2119;
- M reprezentuje numer miesiąca
(0 = nieokreślony, 123456789AB = styczeń … grudzień);
- D reprezentuje numer dnia w miesiącu
(0 = nieokreślony, 123456789 ABCDEFGHJK abcdefghjk mn = 01 … 31).
Zatem dziś mamy b52K.
Wczoraj był b52J, a jutro będzie b52a.
Łatwizna!
Siostro! Dlaczego temu pacjentowi od dat nie podano lekarstw i dopuszczono go do komputera?