Шаг 370 - Ограничения CTime и COleDateTime

С этим классом мы уже знакомились в "Шаг 70 - Подробнее о MFC AppWizard". Там же упоминалась функция GetYear. В описании этой функции сказано что год возвращается с ограничением.

Январь 1,1970 
Январь 18, 2038 (включительно). 

Из этого можно сделать вывод что время в храниться в сжатом формате по типу как это реализовано в BIOS "Шаг 120 - Где хранится время внутри ПК". И как следствие ограничение накладывается Windows. Вывод простой, мы не может с помощью этого класса работать с любым временим так формат внутреннего хранения не позволяет это сделать Если мы хотим использовать любое время то наиболее подходящий класс COleDateTime. COleDateTime класс оперирует датах

От 1 января 100  
До 31 декабря 9999.

Проблема ограничений взялась вот откуда.

Я с SQL работаю через DBLib. И гриды сам заполняю и сортировки и т.п. Так вот если возвращается с сервера поле типа smalldatetime или datetime, то у меня два пути:

  1. Преобразовать при получении в нужный формат и показать. Вот только при сортировке придется откатиться назад, а от формата это может не сработать. Я понимаю, что сортировка должна делаться на сервере. Однако Аналитика дело тонкое. Так, например расчет аналитики занимает 15 сек. за определенный период. А если это надо просто пересортировать, что запускать заново 15 сек ждать, нагрузить сервак и только потом показать. Если на Access , то вообще круто получается. Менеджер уже устал чай пить:)))))). ИЛИ при печать отчета его сортировать но по разному, так зачем процедуру дважды выполнять?????.
  2. Получить дату, как кол-во дней после 1900 и кол-во сек. после полночи. Остальное дело техники. И сортировки работают, как надо.
CString b1="";
COleDateTime t1;
t1.SetDateTime(1900, 1, 1, 0, 0, 0);
t1 += COleDateTimeSpan((LONG) F_DATA.numdays, 0, 0, 0 );
// F_DATA - переменная, F_DATA.numdays - кол-во дней с 1900 года.
b1 = t1.Format((LPCTSTR)"%d%m%y");
//в b1 - '140901 '

При необходимости можно добавить разделитель.

b1.Insert(2,'/');
b1.Insert(5,'/');

Шаг прислал Moth.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.