Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich einzelne Zeitelemente wie Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunden aus einem std::chrono::time_point-Objekt extrahieren?

Wie kann ich einzelne Zeitelemente wie Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunden aus einem std::chrono::time_point-Objekt extrahieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-01 06:05:02505Durchsuche

How can I extract individual temporal elements like year, month, day, hour, minute, second, and milliseconds from an std::chrono::time_point object?

Zeitelemente aus einem std::chrono::time_point extrahieren

Abfrage:

Wie kann ich bestimmte zeitliche Elemente wie Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunden aus einem std::chrono::time_point-Objekt extrahieren?

Auflösung:

Um diese Elemente aus einem time_point zu extrahieren, müssen Sie system_clock::time_point verwenden, da es eine Beziehung zum Zivilkalender hat. Rufen Sie die aktuelle system_clock::time_point ab:

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

Konvertieren Sie diese in einen time_t-Wert:

<code class="cpp">time_t tt = system_clock::to_time_t(now);</code>

Wenn Sie eine Zeitextraktion in der UTC-Zeitzone oder der lokalen Zeitzone benötigen, konvertieren Sie den time_t-Wert zu einem tm:

<code class="cpp">tm utc_tm = *gmtime(&tt);  // UTC
tm local_tm = *localtime(&tt);  // Local</code>

Spezifische Elemente mithilfe der entsprechenden Felder der tm-Struktur extrahieren:

<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

Erweiterte Informationen:

While Die Verwendung der C-Bibliothek ermöglicht die Zeitkonvertierung. Es ist wichtig zu beachten, dass jede system_clock-Implementierung auf der Unix-Zeit basiert, die normalerweise in Sekunden seit dem 1. Januar 1970 UTC gemessen wird.

Für eine präzisere Extraktion nutzen Sie die system_clock precision:

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

Ergebnisse mit den entsprechenden Dauereinheiten drucken:

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

Bibliothekserweiterungen:

Zur vereinfachten Zeitextraktion Erwägen Sie die Verwendung einer C 11/14-Bibliothek wie Datum. Dies reduziert den erforderlichen Code auf:

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

C 20-Standardvorschlag:

Der vorgeschlagene C 20-Arbeitsentwurf enthält direkte Syntax zum Extrahieren dieser Felder aus 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>

Das obige ist der detaillierte Inhalt vonWie kann ich einzelne Zeitelemente wie Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunden aus einem std::chrono::time_point-Objekt extrahieren?. 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