Содержание проблемы

Проблему 2000 г. несложно понять по существу с технической точки зрения. Однако масштаб затронутых ею систем и бизнес-процессов делает ее весьма непростой. Проблема связана с тремя обстоятельствами:

Последствия, связанные с этими аспектами, должны быть учтены всеми организациями. К сожалению, простого решения проблемы 2000 г. не существует по той причине, что в программном обеспечении очень широко используются алгоритмы, работающие с датами, но они не стандартизованы.

Двузначное представление даты в памяти

Наиболее распространенная и самая опасная проблема возникает тогда, когда при составлении программы в ней в поле сохраняемых и (или) обрабатываемых данных, представляющих дату, под год было отведено только два разряда. Алгоритмы, работающие с датами в таком формате, будут делать ошибки, потому что они не воспринимают даты с 2000 г. как числа, значение которых больше, чем даты в этом веке, т.е. начинающиеся с "19". Например, 2000 - 1998 = 2, однако 00 - 98 = -98 (или 98, если программа не работает с отрицательными числами). В результате может оказаться, что ваша бухгалтерская программа покажет всю дебиторскую задолженность просроченной, ошибочно вычислив, что за 98 лет не заплатил ни один клиент.

При двухразрядном представлении даты принимается, что цифры, обозначающие столетие, равны "19". Эта условность считалась необходимой на заре коммерческих приложений из-за высокой стоимости запоминающих устройств, в том числе основной памяти (ОЗУ). Сегодня пользование двузначными датами стало нормой в силу привычного для нас употребления дат в повседневной жизни. Люди предпочитают пользоваться двузначными датами, поскольку человеческий мозг воспринимает дату в контексте, однако компьютеру требуется представление даты в явном виде.

Особенности алгоритмов определения високосного года

Високосный год вычисляется с помощью простого алгоритма. К сожалению, существуют системы и приложения, которые не определяют 2000 г. как високосный, и при использовании этих систем даты после 29 февраля 2000 г. могут оказаться ошибочно сдвинуты на один день. Високосный год определяется по следующему правилу:

Год високосный, если он делится на четыре без остатка, но если он делится на 100 без остатка, это не високосный год. Однако, если он делится без остатка на 400, это високосный год. Таким образом, 2000 г. является особым високосным годом, который бывает лишь раз в 400 лет.

Специальные значения дат

Третья основная проблема, связанная с 2000 г., чаще встречается в старых программах. Для написания более эффективного кода, требующего меньше памяти, полям дат иногда приписывались специальные служебные значения. Чаще всего для этой цели использовалась дата «9/9/99». В некоторых прикладных программах появление специальной даты означало команду "хранить эти данные бессрочно", или "автоматически удалить эти данные через 30 дней", или "при сортировке переместить эти данные в начало отчета". В каждой организации специальные даты-команды могут использоваться по-своему. Это одна из причин, по которой невозможно с помощью одного инструмента выявить все формы правильного и (или) неправильного использования данных о датах.