Maison > développement back-end > C++ > Comment extraire des unités temporelles spécifiques d'un chrono::time_point en C ?

Comment extraire des unités temporelles spécifiques d'un chrono::time_point en C ?

Susan Sarandon
Libérer: 2024-10-30 08:23:02
original
440 Les gens l'ont consulté

How do you extract specific temporal units from a chrono::time_point in C  ?

Extraction d'unités temporelles à partir de points chronologiques

En C, l'extraction d'unités temporelles précises d'un objet std::chrono::time_point dépend de le type d’horloge sous-jacent. Le system_clock, qui a une connexion au calendrier civil, permet d'accéder à des données telles que l'année, le mois, le jour et la milliseconde.

Pour obtenir un system_clock::time_point représentant l'heure actuelle :

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

Convertissez-le en time_t puis en une structure tm à l'aide de la bibliothèque C. Cette option de conversion peut être soit en UTC, soit en fuseau horaire local :

<code class="cpp">std::time_t tt = std::chrono::system_clock::to_time_t(now);
std::tm utc_tm = *std::gmtime(&tt);
std::tm local_tm = *std::localtime(&tt);</code>
Copier après la connexion

Vous pouvez ensuite extraire les composantes temporelles souhaitées, par exemple :

<code class="cpp">int year = local_tm.tm_year + 1900;
int month = local_tm.tm_mon + 1;
int day = local_tm.tm_mday;</code>
Copier après la connexion

De plus, system_clock est souvent basé à l'heure Unix, donnant accès aux fractions de seconde :

<code class="cpp">int frac_second = std::chrono::system_clock::duration::period::num / std::chrono::system_clock::duration::period::den;</code>
Copier après la connexion

Les jours de classe de durée_cast et de durée personnalisée peuvent être utilisés pour faciliter des calculs de temps précis :

<code class="cpp">std::chrono::duration<int, std::ratio_multiply<std::chrono::hours::period, std::ratio<24>>> days;
std::chrono::days d = std::chrono::duration_cast<std::chrono::days>(tp);
tp -= d;
std::chrono::hours h = std::chrono::duration_cast<std::chrono::hours>(tp);
// ... (continue for minutes, seconds, and fractional seconds)</code>
Copier après la connexion

Alternativement, la "date" la bibliothèque propose une approche simplifiée et polyvalente :

<code class="cpp">#include "date.h"

auto tp = std::chrono::system_clock::now();
auto dp = date::floor<date::days>(tp);
auto ymd = date::year_month_day{dp};
auto time = date::make_time(std::chrono::duration_cast<std::chrono::milliseconds>(tp-dp));
int year = ymd.year();
int month = ymd.month();
// ... (continue for day, hour, minute, second, millisecond)</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