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
Susan Sarandonoriginal
2024-10-30 08:23:02369parcourir

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>

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>

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>

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>

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>

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>

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:
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