Да, cal с нами уже очень давно, однако я на днях нашел в нем достаточно грубую ошибку в локализации, которую и решил поправить.
Сразу оговорюсь, что программист на С из меня никакой, поэтому увидев исходники cal в util-linux-ng-2.16.2, я решил не мучить себя и потренироваться на кошках:) Нашел исходники cal 3.5, которые хоть в объеме больше в 2 с лишним раза, но мне показались куда проще.
И так, речь пойдет о давно минувших днях. А точнее о 18 веке. Именно тогда Великобритания перешла с юлианского календаря на григорианский. Поэтому если посмотреть (cal 9 1752) на сентябрь месяц 1752 года, то увидим:
Смутило меня здесь то, что Россия перешла на него совсем не тогда, а в феврале 1918 года (после 31 января следовало 14 февраля). Поэтому сразу стало интересно, что же выдаст cal на этот месяц. Как и ожидалось, ничего хорошего он не выдаст:
Поэтому решил исправить эту несправедливость. Получился такой вот патч:
686c686,694 <if(y ==1752&& m ==8){/* special case Sep. 1752 */ --- >char* locale = getenv("LANG"); > >if(strncmp(locale,"ru",2)==0&& y ==1918&& m ==1){/* special case for Soviet Russia Feb. 1918 */ > first =14; >last=16; > index =12; >} > >elseif(strncmp(locale,"en",2)==0&& y ==1752&& m ==8){/* special case Sep. 1752 */ 848a857,858 >char* locale = getenv("LANG"); > 850c860,862 <if(y >1752-1||(y ==1752-1&& m >8)) --- >if(strncmp(locale,"en",2)==0&&(y >1752-1||(y ==1752-1&& m >8)) >|| strncmp(locale,"ru",2)==0&&(y >1918-1||(y ==1918-1&& m >1)) >)
После приминения которого получаем то что хотели:
Может кто соберется таки исправить эту проблему в util-linux-ng?:)
Если я захочу посмотреть любую дату между 1752 и 1918 годами (в связке с Российской историей), то получу некорректные данные.
А вообще не стоит относится к посту серьезно)
Как образом она может негативно повлиять сейчас в 2010
Ну представь, что у тебя пра-пра-прабабушка до революции заныкала пару миллионов (золотыми слитками) в швейцарском банке, там набежали проценты, а ты теперь наследник всего этого щастья. Приходишь, такой, в этот швейцарский банк, а тебе говорят: «Уважаемый господин, у нас с вами тут путаница в датах, поэтому мы вам ничего не отдадим :-p ».
что ты будешь делать, если человек захочет вывести календарь на английском языке, но с российской дато смены календаря? или на китайском языке — советский революционный календарь 1931-1940 годов?
А ты будешь использовать cal 3.5?)
Еще раз повторюсь — этот пост нельзя воспринимать серьезно. Я хотел просто указать на интересную особенность программы cal и ничего более.
А вообще не стоит относится к посту серьезно)
Еще раз повторюсь — этот пост нельзя воспринимать серьезно. Я хотел просто указать на интересную особенность программы cal и ничего более.