Maison >développement back-end >C++ >Comment extraire des unités temporelles spécifiques d'un chrono::time_point en 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!