С этим классом мы уже знакомились в "Шаг 70 - Подробнее о MFC AppWizard". Там же упоминалась функция GetYear. В описании этой функции сказано что год возвращается с ограничением.
Январь 1,1970 Январь 18, 2038 (включительно).
Из этого можно сделать вывод что время в храниться в сжатом формате по типу как это реализовано в BIOS "Шаг 120 - Где хранится время внутри ПК". И как следствие ограничение накладывается Windows. Вывод простой, мы не может с помощью этого класса работать с любым временим так формат внутреннего хранения не позволяет это сделать Если мы хотим использовать любое время то наиболее подходящий класс COleDateTime. COleDateTime класс оперирует датах
От 1 января 100 До 31 декабря 9999.
Проблема ограничений взялась вот откуда.
Я с SQL работаю через DBLib. И гриды сам заполняю и сортировки и т.п. Так вот если возвращается с сервера поле типа smalldatetime или datetime, то у меня два пути:
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.