Extrait année/mois/jour, etc. de std::chrono::time_point en C++
Comment puis-je extraire les l'année, le mois, le jour, l'heure, les minutes, les secondes et les millisecondes à partir d'un std::chrono::time_point
objet?
J'ai seulement vu des exemples sur la façon d'extraire le montant total, par exemple, de quelques secondes à partir d'un duration
.
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez extraire cette information à partir d'un
system_clock::time_point
. C'est le seul fourni par le système de l'horloge qui a une relation avec le calendrier civil. Voici comment obtenir le courant time_point à l'aide de cette horloge:Vous pouvez ensuite convertir cette
time_t
avec:À l'aide de la bibliothèque C, vous pouvez convertir en un
time_t
à untm
, mais vous devez choisir si vous voulez que la conversion à se produire dans le fuseau horaire UTC, ou vous le fuseau horaire local:Ensuite, vous pouvez imprimer les composants de la tm, par exemple:
En outre
Si vous le souhaitez, vous pouvez profiter de cette situation de non-garantie de l'information:
Chaque mise en œuvre de
system_clock
je suis au courant est basé sur le temps unix. I. e. le nombre de secondes depuis le de Nouvelles Années 1970 UTC, en négligeant les secondes intercalaires. Et la précision de ce nombre est généralement de moins de secondes. Voici un programme complet qui extrait l'ensemble de ces informations:Il est pratique de créer un personnalisé
duration
de modèle de jours:Maintenant, vous pouvez prendre le temps depuis l'époque, pour que la fine de précision, car il peut gérer, avec:
Puis tronquer à jours, et soustrayez-off.
Puis tronquer à heures, et soustrayez-off.
Continuer jusqu'à ce que vous avez soustrait les secondes.
Ce que vous êtes de gauche avec la fraction de seconde avec les unités de
system_clock::duration
. Afin d'impression que de l'exécution de la valeur et de la durée de la compilation des unités de valeur.Pour moi ce programme imprime:
Ma sortie indique le
system_clock::duration
la précision est de quelques microsecondes. Si désiré, qui peut être tronqué à quelques millisecondes avec:Mise à jour
Cette tête de C++11/14 bibliothèque encapsule le travail ci-dessus, la réduction de travail du client vers:
Qui vient de sortie pour moi:
Une Autre Mise À Jour
Cette bibliothèque a grandi en C++ proposition de normes et est maintenant dans le C++20 projet de travail. La syntaxe pour l'extraction de ces champs à partir d'une
system_clock::time_point
en C++20 sera:Ci-dessus suppose que vous voulez ces champs en UTC. Si vous préférez, dans un autre fuseau horaire, qui sera également possible. Par exemple, voici comment le faire dans votre ordinateur local time zone:
La seule différence ci-dessus est la construction de
tp
qui dispose désormais d'un typelocal_time
par opposition àsys_time
dans l'heure UTC exemple. Sinon on aurait pris un temps arbitraire zone avec ce petit changement:tm
est qu'il n'a pas la précision à la milliseconde, ce qui est quelque chose dont j'ai besoin.from_time_t
. Et puis soustrayez les deux. Vous devriez obtenir une durée qui contient les fractions de secondes, vous pouvez manipuler plus loin.days
tel que défini ci-dessus, ettypedef std::chrono::time_point < std::chrono::system_clock, days > day_point;
tm local_tm = *localtime(&tt);
n'est pas thread-safe en général (même si c'est dans Windows)Date.h
est 8000+ lignes de long. Cas classique de plus de génie, compte tenu de tout ce qu'on a vraiment besoin ce sont des versions fixes de la merdeasctime, localtime,...
dinosaure fonctions dans l'espace de noms standard, par exemplevoid localtime( time_t t, struct tm * destination);
, la suppression de ces oh donc de 1960 données courses. Sinon,std::chrono::time_point_cast<std::chrono::timezones::localtime>(std::chrono::system_clock::now() ).to_string<std::chrono::timestring::zulu>()
. Il ne fait aucun sens que vous pouvez lancer des durées de milisecondes et il n'utilise pas le même style pour la coulée de points dans le temps.std::chrono::system_clock::now()
être unduration
et pas unDateTime
genre de dédié type de son propre. Beaucoup de problèmes de résulter de la décision qui ontTimeSpan
akaduration
être également pour représenter un fixe, point absolu dans le temps. Mais bon - je me sens bien. J'utilise le Win32 FileTime fonctions à la place 🙂std::chrono::system_clock::time_point
, passystem_clock::duration
. Si vous souhaitez en apprendre davantage sur le<chrono>
bibliothèque, je peux vous aider. Si vous voulez juste pour le délire, veuillez vous renseigner suffisamment de disserter avec des faits.