назад...

Runner и "Проблема 2000"

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

От идеи компенсации возможной некорректной работы функции GetLocalTime в некоторых системах пришлось отказаться после тестирования нескольких устаревших систем, которые продемонстрировали непредсказуемость поведения системного календаря и невозможность выработать универсальный алгоритм компенсации.

...дальше