Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Преобразование _variant_t


Автор: Lazin 27.2.2009, 16:17
есть переменная _variant_t, которая хранит значение adDate в виде формате double, следующим образом: 
Цитата

Indicates a date value (DBTYPE_DATE). A date is stored as a double, the whole part of which is the number of days since December 30, 1899, and the fractional part of which is the fraction of a day.

нужно его преобразовать в boost::posix_time::ptime, либо во что-нибудь вменяемое(time_t, tm, FILETIME, SYSTEMTIME), ума не приложу как это сделать smile 

Автор: mrbrooks 27.2.2009, 16:26
это как я понимаю до запятой количество дней с 30.12.1899, а дробная часть - собственно часы, минуты,секунды и миллисекунды? Не слабая метка. Ты можешь выложить хоть одно значение? 

Автор: Lazin 27.2.2009, 16:40
не могу, но нашел ф-ю VariantTimeToSystemTime, похоже что оно...

Автор: mrbrooks 27.2.2009, 16:46
скорее всего самое то.

Автор: Earnest 27.2.2009, 18:18
То, конечно. И вообще, если ты в Виндоусе, то там куча структур для даты-времени и еще большая куча функций, их друго в друга преобразовывающих. В варианте хранится DATE (строго говоря, это typedef для double). VariantTimeToSystemTime преобразует ее в SYSTEMTIME, а это, в свою очередь, можно преобразовать в time_t. Только имей в виду, что у этих данных разные точки отсчета. Скажем, DATE может быть и отрицательным, и представлять время от царя Гороха, а вот time_t - unsigned число секунд, поэтому отсчитыватеся только вроде с 1970 года. Т.е. дату рождения дедушки так хранить нельзя.

Автор: GoldFinch 27.2.2009, 19:11
_variant_t, wchar_t... что за неудобные названия типов %)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)