J'ai mon propre C ++ J'ai 2 existe-t-il gratuitement disponible C ++ Si un exemple concret pourrait être fourni qui serait génial. Notez que j'ai besoin de comparer à millisecond. P> Je pensais à boost fort> ou DateTime code> défini comme suit:
DateTime code> que j'ai besoin de comparer pour voir lequel L'un est supérieur à (plus récent) l'autre. p>
DateTime code> la classe que je peux utiliser pour P>
8 Réponses :
voir Boost Date Date Library P >
et votre classe ressemble beaucoup à struct TM P>
EDIT: Vous avez raison que la structure TM ne prend pas en charge la précision de milliseconde. P>
Regardez à un Boost exemple . Est-ce que cela aide? P>
J'ai déjà jeté un coup d'œil à cette documentation .. mais c'était si dense. Je ne pouvais pas non plus trouver un exemple avec millisec. Je cherchais un exemple sur cette ligne: doc.trolltech.com/4.5/qdateTime.html < / a>.
C'est vrai que ma classe est beaucoup comme la structure TM ... Cependant, la distinction cruciale est que j'ai également un champ millisecond.
La structure TM ne prend pas en charge les millisecondes depuis, c'est une chose de POSIX et une heure normale de style UNIX n'est donnée qu'à la seconde.
Les docs me semblent assez clairs ... Boost :: POSIX_TIME :: PTIX est la classe que vous seriez la classe que vous seriez convertissant, et il est construit à partir de boost :: grégorien :: Date (année, mois, jour) et boost: : Posix_Time :: time_duration (heures, minutes, secondes) + boost :: POSIX_TIME :: millisecondes (MSEC)
Fred, l'exemple que vous avez inclus ressemble définitivement à quelque chose qui peut être utilisé. Je vais essayer dans mon application, et si tout fonctionne bien, j'accepterai votre réponse. Merci! =)
Utilisation de l'exemple que vous avez souligné, j'ai pu écrire le code et l'avoir testé. Cela a fonctionné comme on m'y attendait. J'ai posté ce que j'ai fait comme l'un des réponses de ce post. Merci!
Qu'est-ce qui ne va pas à utiliser le contenu de
Rien ne va pas avec ça ... pourriez-vous s'il vous plaît peut-être donner un exemple de comment je pourrais continuer à utiliser
Ceci est C ++. Cela devrait être #include
regarder MFC DateTime Classes Classes CURE et ColedateTime Plus chez http://www.codeproject.com/kb/dateTime/dateTimecedisc.aspx < / a> p>
Je suis désolé, je ne peux pas utiliser MFC puisque nous avons l'intention de faire une application multiplate-forme.
Voir le lien .. cela peut être utile.
Je ne sais aucun de la tête. Mais j'envisagerais de réécrire votre classe de date à contenir un entier unique de 64 bits décrivant des millisecondes depuis l'époque conventionnelle (1970 étant-ce?). Ensuite, vous êtes libre de diviser simplement par 1000 et d'utiliser les fonctions CRT normales pour le formatage en tant que chaîne, plus vous pouvez prendre la valeur MODULO 1000 pour obtenir la partie milliseconde. P>
Les opérateurs de comparaison deviennent ensuite faciles .. p>
Je recommanderais quelque chose comme ça. Conservez les temps en interne comme un entier comme celui-ci afin que les comparaisons soient faciles, puis fournissent des accesseurs pour obtenir les différentes parties de l'heure de panne (heure, mois, etc.). Si l'efficacité est une préoccupation, vous pouvez mettre en cache le temps décomposé jusqu'à ce que l'heure interne soit modifiée, de sorte que vous n'avez pas à conserver l'année pour obtenir le mois, etc.
C'est-à-dire que si vous ne prévoyez pas d'utiliser Boost.
Vous voudrez peut-être consulter qdateTime de qt, ce qui a les opérateurs requis et Précision ms.
La conversion de votre classe pourrait être effectuée via p> l'autre solution est similaire; -) p> p>
gnu r utilise un remplacement de struct TM avec une précision microseconde - au lieu de secondes (entier), car l'époque, elle utilise désormais un numéro de point flottant. C'est vraiment vraiment utile. Pour beaucoup de mes applications, je viens de doubler et d'obtenir les conversions de temps. Voir R-2.9.1 / SRC / Main / DateTime.c dans les sources R en cours. P>
Ayant cela dans une classe autonome C ++ serait pratique. P>
D'accord, voici l'extrait de code final qui répond à ma propre question. J'ai pensé à partager cela au cas où cela pourrait être utile à d'autres personnes à l'avenir. Grâce à Fred Larson de pointer l'exemple de boost.
J'ai choisi Boost pour faire le calcul DateTime parce que ma demande utilise déjà un coup de pouce ailleurs. Je pense que j'aurais peut-être pu utiliser Qt aussi, bien que je ne puisse pas confirmer complètement. P>
supposant que la datetétime est définie comme suit: p> pour ajouter 2 DateTime ensemble pour renvoyer une nouvelle heureTetime forte> p>
Je félicite des dates de stockage de grégoriennes il y a des âges. Je stocke les dates comme un entier de 32 bits (en quelque sorte comme une date julienne). La date est donc composée (année * 1000) + doy (Doy est le jour de l'année). C'est à dire. - 2009001 est le 1er janvier 2009 - 2009365 est le 31 décembre 2009 P>
Ma catégorie de date de la date fournit des méthodes pour obtenir l'année, le mois et la journée, l'ajout, la soustraction, l'incrémentation et la décrémentation, en comparant, à obtenir le nombre de jours entre les dates, etc. P>
Pour la date et l'heure, j'utilise 64 bits flotteurs où la partie entière du nombre réel est la même que celle des dates entier (Julian comme) décrites ci-dessus, et la fraction représente le temps en fraction d'une journée. p>
I.e. p>
Si vous n'avez besoin que de précision minute, vous pouvez utiliser 32 bits flottants pour la date et l'heure, mais vous ne pouvez pas adéquatement avec précision stocker des secondes et des millisecondes. P>
Les avantages des dates de stockage (et du temps) de cette manière sont les suivants: P>
Vous n'avez besoin que de 8Bans pour représenter les données et l'heure par rapport à 22bytes (en supposant des entiers 32 bits) utilisé par la classe DateTime dans la question. P> li>
comparé aux dates stockées comme secondes d'une époque, Lorsque vous regardez le nombre (par exemple dans le débogueur) vous pouvez plus ou moins identifier de le nombre l'année et le jour de l'année et la période approximative de la journée (Pour obtenir l'heure, minute, deuxième après minuit simplement de 24, 1440, 86400 respectivement). P> li>
comparer les dates est triviale, comparativement simplement les numéros (Une seule opération de la CPU par rapport à celle-ci prendrait pour l'exemple DateTime). P> LI>
Moins d'opérations de comparaison à faire à ce jour arithmétique. p> li> ul>
L'inconvénient de ceci (pour le temps) est une légère perte de précision (c'est pratiquement un point de muet) et vous devez faire une simple arrondie pour obtenir de belles valeurs entières lors de la conversion des valeurs entière des heures et des secondes. p>
Si vous avez votre propre classe, pourquoi avez-vous besoin d'un autre?
Ou plus important encore, si vous allez utiliser la classe de quelqu'un d'autre, pourquoi l'utiliser uniquement pour des comparaisons? Il suffit d'utiliser leur classe. Le travail est fait pour vous. Fossé votre classe.
La raison en est que ma demande est une bibliothèque C ++ que d'autres applications utiliseront. 1) Je ne veux pas qu'ils devraient inclure des bibliothèques de booster pour qu'ils utilisent ma bibliothèque. 2) Cette classe DateTime a déjà été utilisée dans de nombreux endroits d'un système hérité. Merci pour les commentaires cependant.
Eh bien, réinventer la roue est mauvais: | S'ils peuvent utiliser votre bibliothèque, ils peuvent utiliser Boost.
Ouais..je souhaite aussi. La chose à propos de boost est que c'est tellement grand. Tant de dossiers, et les fichiers .lib sont énormes (je suis sur Windows). C'est pourquoi je ne veux pas qu'ils incluent Boost.
Eh bien, vous pouvez extraire le dossier dont vous avez besoin et la plupart sont en tête-tête seulement: | Vous feriez de vos utilisateurs une bonne chose en leur montrant
la lumière code> qui est
boost code>. Je vais arrêter maintenant :)