Я борюсь несколько дней с COleDateTime
в МФЦ.
я имею CTime
с правильными значениями. Правильные годы, дни, месяцы, часы, минуты и секунды.
Я попробовал несколько способов конвертировать CTime
в COleDateTime
:
-1. Я положил CTim
Данные для конструктора COleDateTime
COleDateTime(int nYear,int nMonth,int nDay, int nHour, int nMin,int nSec );
-2. я отформатировал CTime
в time.Format("%m/%d/%y %H:%M:%S");
и перешел к ParseDateTime
из COleDateTime
,
-3. Также я пытался использовать SetDateTime
из COleDateTime
После этого я получаю неправильные значения минут 1-2 мин. более менее.
Я никогда не видел этого раньше, и я ничего не мог найти в Интернете. Все говорят о точности потери, но это секунда, а не минута.
Пожалуйста, совет что-то для меня!
Спасибо
Я думаю, что проблема в том, что COleDateTime внутренне использует float для хранения, и значение представляет количество дней с 30 декабря 1899 года.
По мере увеличения количества дней точность меньших полей (например, минут) уменьшается. Например, число с плавающей запятой может точно хранить значения 1000000 и 0,0000001, но не может хранить 1000000.0000001. Это не имеет достаточно битов точности.
Это ограничение указано в документации MSDN:
Этот тип также используется для представления значений только для даты или времени. По соглашению, дата 0 (30 декабря 1899 г.) используется только для значений времени. Точно так же время 0:00 (полночь) используется только для значений даты.
Поэтому, если вам нужно точное время, установите 30 декабря 1899 года.
Кажется, что Microsoft могла бы просто спроектировать этот класс для хранения части «days» как целого числа, но эй, это было бы слишком ЛЕГКО.
Других решений пока нет …