Maison > développement back-end > C++ > Comment puis-je extraire des éléments temporels individuels tels que l'année, le mois, le jour, l'heure, les minutes, les secondes et les millisecondes à partir d'un objet std::chrono::time_point ?

Comment puis-je extraire des éléments temporels individuels tels que l'année, le mois, le jour, l'heure, les minutes, les secondes et les millisecondes à partir d'un objet std::chrono::time_point ?

Mary-Kate Olsen
Libérer: 2024-11-01 06:05:02
original
661 Les gens l'ont consulté

How can I extract individual temporal elements like year, month, day, hour, minute, second, and milliseconds from an std::chrono::time_point object?

Extraction d'éléments temporels à partir d'un std::chrono::time_point

Requête :

Comment puis-je extraire des éléments temporels spécifiques, tels que l'année, le mois, le jour, l'heure, la minute, la seconde et les millisecondes, à partir d'un objet std::chrono::time_point ?

Résolution :

Pour extraire ces éléments d'un time_point, vous devez utiliser le system_clock::time_point, car il a une relation avec le calendrier civil. Récupérez le system_clock::time_point actuel :

<code class="cpp">system_clock::time_point now = system_clock::now();</code>
Copier après la connexion

Convertissez-le en une valeur time_t :

<code class="cpp">time_t tt = system_clock::to_time_t(now);</code>
Copier après la connexion

Si vous avez besoin d'une extraction de l'heure dans le fuseau horaire UTC ou le fuseau horaire local, convertissez la valeur time_t vers une tm :

<code class="cpp">tm utc_tm = *gmtime(&tt);  // UTC
tm local_tm = *localtime(&tt);  // Local</code>
Copier après la connexion

Extraire des éléments spécifiques à l'aide des champs correspondants de la structure tm :

<code class="cpp">std::cout << local_tm.tm_year + 1900 << '\n';  // Year
std::cout << local_tm.tm_mon + 1 << '\n';  // Month
std::cout << local_tm.tm_mday << '\n';  // Day
Copier après la connexion

Informations détaillées :

Alors l'utilisation de la bibliothèque C permet la conversion de l'heure, il est important de noter que chaque implémentation de system_clock est basée sur l'heure Unix, généralement mesurée en secondes depuis le 1er janvier 1970 UTC.

Pour une extraction plus précise, profitez de l'option précision system_clock :

<code class="cpp">system_clock::duration tp = now.time_since_epoch();
days d = duration_cast<days>(tp);  // Days
tp -= d;  // Subtract days
hours h = duration_cast<hours>(tp);  // Hours
tp -= h;  // Subtract hours
...  // Continue for minutes, seconds, and fractional seconds</code>
Copier après la connexion

Imprimez les résultats avec les unités de durée appropriées :

<code class="cpp">std::cout << d.count() << "d " << h.count() << ':' << m.count() << ':' << s.count();
std::cout << " " << tp.count() << "[" << system_clock::duration::period::num << '/' << system_clock::duration::period::den << "]\n";
Copier après la connexion

Améliorations de la bibliothèque :

Pour une extraction simplifiée du temps, pensez à utiliser une bibliothèque C 11/14 telle que date. Cela réduit le code nécessaire à :

<code class="cpp">auto tp = std::chrono::system_clock::now();
using date::floor;  // Namespace for streaming operator
std::cout << tp << '\n';  // Outputs date and time components
auto dp = floor<date::days>(tp);  // Omits fractional parts
auto ymd = date::year_month_day{dp};
...  // Individual elements can be accessed as members of ymd</code>
Copier après la connexion

Proposition de norme C 20 :

Le projet de travail C 20 proposé inclut une syntaxe directe pour extraire ces champs de system_clock : time_point :

<code class="cpp">year_month_day ymd{floor<days>(tp)};
hh_mm_ss time{floor<milliseconds>(tp - dp)};
auto y = ymd.year();
auto m = ymd.month();
...  // Extract remaining elements similarly</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal