Runner и "Проблема 2000"
Runner 2.15 и следующие версии являются полностью совместимым с 2000-м годом.
В качестве подтверждения этого заявления:
- Внутреннее представление даты является бинарным, при этом каждому
разряду (число, месяц, год) отводится отдельное 16 битное целое без знака,
Таким образом, Runner точно манипулирует значением года в пределах от 0 до 65535.
- При вводе числа (записанного пользователем в расписание) значение года от 100
до 65535 используется как есть. Значения от 0 до 99 года считаются относящимися
к текущему столетию и к ним прибавляется число, равное значению "нулевого" года
текущего столетия (для 19хх это число равно 1900, для 20хх - 2000 и т.п.).
Таким образом год, записанный как 99, в 1999-м году будет преобразован в 1999,
а в 2099-м будет равен 2099. "Нулевой" год получается путем сброса двух младших
разрядов текущего года, возвращенного функцией Win32 API GetLocalTime.
- При выводе числа (во встроенных переменных) производится простое преобразование
бинарного целого без знака в его текстовое представление, таким образом выводятся
все четыре цифры.
- Runner не использует каких-либо "особых" значений календарных чисел типа
9.9.99.
- В алгоритмах, используемых при вычислениях дат учтено, что 2000-й год является
високосным.
- Для получения текущей даты используется только функция Win32 API GetLocalTime,
возвращающая каждый разряд в отдельном 16-битном целом без знака. Таким образом,
если сама ОС корректно отрабатывает 2000-й год, то и Runner будет функционировать
нормально.
- При разработке программы не использованы библиотеки сторонних производителей,
поэтому код самой программы не содержит скрытых ошибок.
- Программа успешно прошла тестирование на корректно работающих с 2000-м годом системах
Windows 98 и Windows NT 4.0 (SP4).
В случае, если вы все-таки обнаружите какую-либо ошибку, сообщите мне, она будет
немедленно устранена.
От идеи компенсации возможной некорректной работы функции GetLocalTime в некоторых
системах пришлось отказаться после тестирования нескольких устаревших систем,
которые продемонстрировали непредсказуемость поведения системного календаря и
невозможность выработать универсальный алгоритм компенсации.
...дальше