Heim  >  Artikel  >  Backend-Entwicklung  >  Wie extrahieren Sie bestimmte Zeiteinheiten aus einem chrono::time_point in C?

Wie extrahieren Sie bestimmte Zeiteinheiten aus einem chrono::time_point in C?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 08:23:02275Durchsuche

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

Zeiteinheiten aus Chrono-Zeitpunkten extrahieren

In C hängt das Extrahieren präziser Zeiteinheiten aus einem std::chrono::time_point-Objekt davon ab der zugrunde liegende Uhrentyp. Die system_clock, die eine Verbindung zum Zivilkalender hat, ermöglicht den Zugriff auf Daten wie Jahr, Monat, Tag und Millisekunde.

So erhalten Sie einen system_clock::time_point, der die aktuelle Zeit darstellt:

<code class="cpp">std::chrono::system_clock::time_point now = std::chrono::system_clock::now();</code>

Konvertieren Sie es mithilfe der C-Bibliothek in eine time_t- und dann in eine tm-Struktur. Diese Konvertierungsoption kann entweder in UTC oder der lokalen Zeitzone erfolgen:

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

Sie können dann die gewünschten zeitlichen Komponenten extrahieren, zum Beispiel:

<code class="cpp">int year = local_tm.tm_year + 1900;
int month = local_tm.tm_mon + 1;
int day = local_tm.tm_mday;</code>

Zusätzlich basiert häufig system_clock auf Unix-Zeit und bietet Zugriff auf Sekundenbruchteile:

<code class="cpp">int frac_second = std::chrono::system_clock::duration::period::num / std::chrono::system_clock::duration::period::den;</code>

Der „duration_cast“ und die benutzerdefinierten Dauerklassentage können verwendet werden, um präzise Zeitberechnungen zu erleichtern:

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

Alternativ kann das „Datum“ verwendet werden. Die Bibliothek bietet einen vereinfachten und vielseitigen Ansatz:

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

Das obige ist der detaillierte Inhalt vonWie extrahieren Sie bestimmte Zeiteinheiten aus einem chrono::time_point in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn