Не так давно пришлось мне писать программку, которая будет переводить
время из одного формата в другой.
Все было бы хорошо, потому что тот формат, В который я переводил время,
- это стандартные секунды, минуты, часы, дни и года. Но вот ИЗ ЧЕГО я
делал эти минуты и часы... UNIXовский формат - секунды с 1-го января
1970-го года. В шестнадцатеричной системе. "Который час?" - "0хF7A84D78,
бабушка!" - "Спасибо, сынок!"
В принципе, есть библиотечные функции, которые позволяют сделать это
быстро и без проблем. gmtime и localtime из [time.h], например. (Знающие
сейчас кивают головой, незнающим это нафиг не нужно). Но на операционной
системе AIX эти библиотечные функции работают только с числами,
меньшими, чем 0xFFFFFFFF. А это всего 4294967295 секунд, или примерно
1978-й год. У нас же на дворе 2003-й. Так вот, чтобы обойти это
ограничение, надо делать дату не из одного числа типа 0x.... , а из
нескольких. Вот такую программу я и писал.
В принципе, не так уж все это было и плохо. Пришлось повозиться с
високосными годами, (если год делится на 25, то он не високосный, за
исключением тех случаев, если он делится на 400), но в целом программа
работает. И вот сижу я, тестирую ее. От балды ввожу числа, дата
высчитывается двумя разными способами - моей программой и библиотечной
функцией, - и я сравниваю результаты, стараясь, чтобы хотя бы год
примерно совпадал.
Ввожу какое-то число... Мой результат: 10:20:37, 1 Июля 1973. Результат
библиотечной функции: 10:20:37, 31 Июня 1973.
Кто помнит, в каком году 31-е июня упразднили за ненадобностью? :-))
(Hitech из Netvision - привет доблестным работникам техподдержки лучшего
Интернет-провайдера от бывшего коллеги!)