неверное значение в coledatetime

Я борюсь несколько дней с 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 мин. более менее.
Я никогда не видел этого раньше, и я ничего не мог найти в Интернете. Все говорят о точности потери, но это секунда, а не минута.
Пожалуйста, совет что-то для меня!
Спасибо

1

Решение

Я думаю, что проблема в том, что COleDateTime внутренне использует float для хранения, и значение представляет количество дней с 30 декабря 1899 года.

По мере увеличения количества дней точность меньших полей (например, минут) уменьшается. Например, число с плавающей запятой может точно хранить значения 1000000 и 0,0000001, но не может хранить 1000000.0000001. Это не имеет достаточно битов точности.

Это ограничение указано в документации MSDN:

Этот тип также используется для представления значений только для даты или времени. По соглашению, дата 0 (30 декабря 1899 г.) используется только для значений времени. Точно так же время 0:00 (полночь) используется только для значений даты.

Поэтому, если вам нужно точное время, установите 30 декабря 1899 года.

Кажется, что Microsoft могла бы просто спроектировать этот класс для хранения части «days» как целого числа, но эй, это было бы слишком ЛЕГКО.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector