С технической точки зрения проблему 2000 года понять несложно. Однако масштаб затрагиваемых ею систем и бизнес-процессов делает ее весьма непростой. Проблема связана с тремя основными обстоятельствами: 1) двузначное представление даты в памяти, 2) особенности алгоритмов определения високосного года, 3) использование специальных значений дат. Последствия, связанные с этими вопросами, должны быть учтены всеми организациями. К сожалению, простого решения проблемы 2000 года не существует по той причине, что в программном обеспечении очень широко используются алгоритмы, работающие с датами, но они не стандартизованы.
Двузначное представление даты в памяти
Наиболее распространенная и самая опасная проблема возникает тогда, когда при составлении программы в поле сохраняемых и (или) обрабатываемых данных, представляющих дату, под год было отведено только два разряда. Алгоритмы, работающие с датами в таком формате, будут делать ошибки, потому что они не воспринимают даты, начинающиеся с 2000 года, как числа, значение которых больше, чем даты нынешнего века, т.е. начинающиеся с «19». Например, 2000 — 1998 = 2, однако 00 — 98 = -98 (или 98, если программа не работает с отрицательными числами). В результате может оказаться, что ваша бухгалтерская программа покажет всю дебиторскую задолженность просроченной, ошибочно вычислив, что за 98 лет не заплатил ни один клиент.
При двухразрядном представлении даты принимается, что цифры, обозначающие столетие, равны «19». Эта условность считалась необходимой на заре коммерческих приложений из-за высокой стоимости запоминающих устройств, в том числе основной памяти (ОЗУ). Сегодня пользование двузначными датами стало нормой в силу привычного для нас употребления дат в повседневной жизни. Люди предпочитают пользоваться двузначными датами, поскольку человеческий мозг воспринимает дату в контексте, однако компьютеру требуется представление даты в явном виде.
Алгоритмы определения високосного года
Високосный год вычисляется с помощью простого алгоритма. К сожалению, существуют системы и приложения, которые не определяют 2000 год как високосный, и при использовании этих систем даты после 29 февраля 2000 года могут оказаться ошибочно сдвинуты на один день. Високосный год определяется по следующему правилу. Год является високосным, если он делится на четыре без остатка, но если он делится на 100 без остатка, это не високосный год. Однако если он делится без остатка на 400, это високосный год. Таким образом, 2000 год является особым високосным годом, который бывает лишь раз в 400 лет.
Специальные значения дат
Третья основная проблема 2000 года чаще встречается в старых программах. Для написания более эффективного кода, требующего меньше памяти, полям дат иногда приписывались специальные служебные значения. Чаще всего для этой цели использовалась дата «9.9.99». В некоторых прикладных программах появление специальной даты означало команду «хранить эти данные бессрочно», или «автоматически удалить эти данные через 30 дней», или «при сортировке переместить эти данные в начало отчета». В каждой организации специальные даты-команды могли использоваться по-своему. Это одна из причин, по которой невозможно с помощью одного инструмента выявить все формы правильного и (или) неправильного использования данных о датах.
Технически проблему понять несложно. Ее решения тоже, в общем, просты. Основные трудности заключаются в ее масштабе. Должны быть учтены все фрагменты аппаратного и программного обеспечения и встроенной системы. Все программные продукты — от центральных систем учета, необходимых для работы, до маленьких сервисных приложений — должны быть проверены на предмет работы с датами. Необходимо также проверить, как даты 2000 года могут повлиять на остальные компоненты системы.