Първоначално в http://www.allegro.com/papers/54.html. Отиди на главната страница.

 

Много софтуерни приложения определят година седмица на-“, известен също като “фискален седмицаили календарна седмица“, който се използва за различни цели. Обикновено, тези седмици са определени като изходни в неделя и завършва в събота (Това се различава от стандарта ISO, разбира се … но това не променя факта, че много програми (и човешки календари), лечение на неделята като на първия ден от седмицата.)


Настоящата разработка разглежда с Y2K проблем, който повърхности, когато се използва в неделя-стартови седмица.

Един нормален година има 53 седмици, когато 51 или 52 са “пълни” седмици, и един или два са “непълни” (или “частично”), тъй като те започват или завършващ в предварително или след година.

Например, 1999 има 53 седмици. Първата седмица има два дни в 1999: Петък, 1 януари и събота, януари 2. миналата седмица има шест дни, в 1999 г. и завършва на Петък, 31 декември.

Ако имаше само 364 ден в годината, а ако годината започна в неделя, а след това всяка година ще има точно 52 седмици. Въпреки това, ние не сме толкова късмет, и не години все има по-малко от 53 седмици.

Както съдбата ще го има, 2000 година разполага с 54 седмици! Първата седмица има един ден: Неделя, 1 януари и 54-ата седмица има една дни: Вторник, 31 декември (виж бележка под линия # 2 защо нарекохме този проблем Y2K).

Оказва се, че 54-седмичен година се случва веднъж на всеки 28 години, така че за последен път е 1972 и преди раждането на много софтуерни пакети сега в обща употреба.

A 54-седмичен година не би било проблем, ако програмисти са били наясно с това, но сме виждали няколко програми, които всъщност се предполага, че броят на седмиците в годината е винаги 53. Това може да доведе до два вида проблеми:

Невалидни ограничения за въвеждане на данни
Видяхме код, който проверява въведени от потребителя номера на седмицата, неправилно ги ограничаване на обхвата 1..53.

Пусни време абортира
Ако кодът е написан на език гама-проверка (например, Pascal), или ако то използва номера на седмицата като индекс в масив от 53 елемента, програмата може да се откажем, или дори по-лошо, вероятно вземете погрешна информация и да продължат да работят .

Това не е просто теоретичен проблем, разбира се. Ние го срещнали в изходния код ние поддържаме за един от нашите клиенти. Екипът, който намери и се характеризира проблема се състои от Бари езеро и Майкъл Хенсли

Бележки под линия:

ISO стандарт 8601 описва стандартите за дати, включително номерацията на седмиците на една година.
В стандарта ISO, една седмица започва в понеделник и завършва в неделя, а първата седмица на годината трябва да включва четвъртък от тази година. Ако софтуерът се сблъскахме беше последвано * ISO * стандарт, 54 седмици” Проблемът би не са настъпили. Стандартът ISO е на разположение за закупуване на: http://www.iso.ch/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=26780.
Добро описание е: http://www.cl.cam.ac.uk/~mgk25/iso-time.html.

Ние наричаме това Y2K проблем, защото, за практически цели, то първо се появява през 2000 година за последен път в годината имаше 54 седмица беше 1972 г., преди да са били написани повечето софтуерни програми. Освен това, това се счита за Y2K проблем, защото тя е била открита по време на изходния код преглед Y2K саниране.

Leave a Comment