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