2013-05-21 1 views
1

Je me bats quelques jours avec COleDateTime dans MFC. J'ai CTime avec les valeurs correctes. Corrigez les années, les jours, les mois, les heures, les minutes et les secondes. J'ai essayé quelques façons de convertir CTime-COleDateTime:valeur incorrecte dans coledatetime

-1.I mis CTim données e au constructeur de COleDateTime

COleDateTime(int nYear,int nMonth,int nDay, int nHour, int nMin,int nSec); 

-2. J'ai formaté CTime à time.Format("%m/%d/%y %H:%M:%S");

et transmis à ParseDateTime de COleDateTime.

-3. J'ai également essayé d'utiliser SetDateTime de COleDateTime

Après cela, je reçois des valeurs incorrectes de minutes 1-2 min. plus ou moins. Je ne l'avais jamais vu auparavant et je ne pouvais rien trouver sur internet. Tout le monde dit abot la perte de précision mais c'est une seconde, pas une minute. S'il vous plaît aviser quelque chose pour moi! Merci

Répondre

3

Je pense que le problème est que COleDateTime utilise en interne un flotteur pour le stockage et la valeur représente le nombre de jours depuis le 30 Décembre 1899.

Comme le nombre de jours est grande, plus la précision de la les champs plus petits (comme les minutes) diminuent. Par exemple, un flotteur peut stocker avec précision les valeurs 1000000 et 0.0000001, mais il ne peut pas stocker 1000000.0000001. Il n'a pas assez de précision.

Cette limitation est fait allusion dans la documentation MSDN:

Ce type est également utilisé pour représenter la date seule ou du temps que des valeurs. Par convention, la date 0 (30 décembre 1899) est utilisée pour les valeurs de temps seulement. De même, l'heure 0:00 (minuit) est utilisée pour les valeurs de date uniquement.

Donc, fondamentalement, si vous voulez un moment précis, réglez la date au 30 Décembre 1899.

Il semble que Microsoft aurait pu simplement conçu cette classe pour stocker la partie « jours » comme un entier, mais Hé, ce serait trop facile.

Questions connexes