parser


Класс для работы с датами расширенного диапазона

Сергей Лифшиц [03 декабря 2004]

Как известно, в Parser объект типа date имеет относительно небольшой диапазон возможных значений — от 01.01.1970 до 01.01.2038 года. Это плата за то, что объект класса внутри себя хранит дату в виде количества секунд, прошедших с начала диапазона. Таким образом, для хранения данных о времени он использует одну переменную типа int. Максимальное значение int — 2147483647. Поделив на 31536000 (количество секунд в году) получаем упомянутые выше 68 лет.

Как было замечено, основным случаем, когда диапазона стандартного класса начинает не хватать — является работа с днями рождений. Жутко много людей родилось до 1970 года. Именно по этой причине и был написан данный класс. Его диапазон шире: 17.11.1858 – 23.12.54078. Класс хранит данные в двух переменных типа int. В одной — количество суток, прошедших с начала диапазона. Во второй - количество секунд, прошедших с начала суток.

Чего не имеет и не умеет этот класс, относительно стандартного: нет поля TZ, всего один вариант конструктора аналогичный ^date::create[...], нет методов calendar, sql-string, unix-timestamp. Замечу, что при необходимости нуждающийся почти всё это может добавить без особых трудностей.

Основной вариант использования класса: ^cdate:print[дата_из_базы_данных;формат;локаль] — печать дат расширенного диапазона, взятых из базы данных.

Но если нужно больше — пожалуйста:

За подробностями — добро пожаловать в исходный код.

Скачать:
cdate.zip (03.12.2004  4,6 КБ)
Архив класса работы с датами расширенного диапазона