В 2000 году 54 недели : еще одна проблема y2k!

Версия 2.3, 2003-01-09

авторы Стэн Силер, Барри Лейк и Майкл Хенсли

Allegro Consultants, Inc. (www.allegro.com)

Многие программные приложения определяют «неделю года», также известную как «финансовая неделя» или «календарная неделя», которая используется для различных целей. Как правило, такие недели начинается в воскресенье и заканчивается в субботу (в отличие от стандарта ИСО, конечно … но это не меняет тот факт, что многие программы (и человеческие календари) используют воскресенье как первый день недели.)

Статья посвящена проблемам y2k, которые возникают, когда воскресенье используется как начало недели.

Обычно в году 53 недели, в том числе 51 или 52 «полных» недель, и 1 или 2 являются «неполными» (или «частичного»), поскольку они начинаются или заканчиваются в предшествующем или следующем году.

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

Если там были только 364 дня в году, а если год начался в воскресенье, то каждый год бы ровно 52 недели. Впрочем, нам не так повезло, и не год когда-либо меньше, чем 53 недель.

Как судьба распорядилась так, что в 2000 году 54 недели! Первую неделю есть один день: суббота, январь 1, и 54-й неделе есть один день: воскресенье, декабря 31. (см. сноску № 2 для почему мы называли это проблема y2k).

Получается, что в 54-году неделю бывает раз в 28 лет, так что в последний раз был 1972 год … задолго до рождения многих программных пакетов теперь в общем пользовании.

В 54-году неделя и не было бы проблем если бы программисты были в курсе, но мы видели несколько программ, которые на самом деле предполагают, что количество недель в году всегда 53. Это может вызвать проблемы двух типов:

Недопустимые ограничения на ввод данных
Мы видели код, который проверяет вводимые пользователем номера недель, неправильно замыкаться в диапазоне 1..53.

Время прерывает
Если код написан на проверку диапазона языке (например, Паскаль), или если он использует недели число как индекс в массив из 53 элементов, программу можно остановить, или даже хуже, возможно, подобрать ошибочную информацию и продолжить работу.

Это не просто теоретическая проблема, конечно. Мы сталкивались с ней в исходном коде мы сохраняем для одного из наших клиентов. Команда, которая найдена и охарактеризована проблема состояла из озера Барри и Майкл Хенсли

Общая информация о компании: Аллегро-консультанты, Инк. работает на Ю2К вопросы в течение многих лет. Мы написали внутренний документ, в котором Хьюлетт-Паккард » используется для начала своего Ю2К усилия в HP-UX и ПДВ/ІХ. Мы также писали Песочные часы 2000 для HP 3000 и 2000 Песочные часы для HP 9000, два дата/время симулятор инструменты.

Сноски:

  1. Стандарт ИСО 8601 описывает стандарты для даты, в том числе нумерация недель года.
    В стандарте ISO, неделя начинается в понедельник и заканчивается в воскресенье, и первая неделя года должна включать четверг с этого года. Если программное обеспечение с которым мы столкнулись, следовал *ИСО* стандарт 54 недель» проблема не произошел бы. Стандарт ISO-это можно приобрести по адресу:нттр://www.iso.ch/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=26780.
    Хорошее описание находится по адресу: нттр://www.cl.cam.ac.uk/~mgk25/iso-time.html.
  2. Мы называем это проблема y2k, потому что, для практических целей, она впервые встречается в 2000 году. В последний раз в году 54 недели был 1972 год, когда большинство программ были написаны. Далее, это считается проблема y2k, потому что он был обнаружен в ходе Ю2К восстановительных мероприятий анализ исходного кода.
Спасибо Ларсу Моуритсену за ISO 8601 ссылки!

Дополнительная информация о стандартом ISO 8601:

Открытый Каталог (odp) в)
Компания Yahoo дискуссии о стандартом ISO 8601
Список стран , которые приняли за стандартом ISO 8601
Математика в календаре ISO 8601 р. Х. Ван Гент
Лучшего времени, худшего времени Гилберт Healton
Есть и *многие* другие ссылки на ИСО 8601 информации в ОРС сайт, указанный выше.

Спасибо Яну Галпину (g1smd на амсат точка org) за дополнительные ИСО 8601 ссылки!

Ссылка на оригинал статьи: http://www.allegro.com/papers/54.html

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>