Maison > développement back-end > C++ > le corps du texte

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
503 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!

source:php.cn
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!