Heim > Backend-Entwicklung > C++ > Hauptteil

Wie extrahieren Sie bestimmte Datums- und Zeitkomponenten wie Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Millisekunden aus einem „std::chrono::time_point'-Objekt in C?

Barbara Streisand
Freigeben: 2024-10-30 07:59:27
Original
764 Leute haben es durchsucht

How do you extract specific date and time components, like year, month, day, hours, minutes, seconds, and milliseconds, from a `std::chrono::time_point` object in C  ?

Datums- und Uhrzeitkomponenten aus std::chrono::time_point extrahieren

Problem:

Wie können wir bestimmte Daten abrufen? Datums- und Zeitkomponenten wie Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Millisekunden aus einem std::chrono::time_point-Objekt?

Lösung:

Um diese Informationen zu extrahieren, müssen wir system_clock::time_point verwenden, da es sich um die einzige vom System bereitgestellte Uhr handelt, die eine Verbindung zum Zivilkalender hat.

<code class="cpp">system_clock::time_point now = system_clock::now();</code>
Nach dem Login kopieren

Konvertierung in einen Zeitstempel :

Als nächstes konvertieren Sie den time_point in einen time_t:

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

Extrahieren von Komponenten:

Konvertieren Sie mithilfe der C-Bibliothek die time_t in eine tm umwandeln und dabei angeben, ob Sie eine Konvertierung in UTC oder in die lokale Zeitzone wünschen:

<code class="cpp">tm utc_tm = *gmtime(&tt);
tm local_tm = *localtime(&tt);</code>
Nach dem Login kopieren

Jetzt können Sie die Komponenten der tm ausdrucken:

<code class="cpp">std::cout << local_tm.tm_year + 1900 << '\n';
std::cout << local_tm.tm_mon + 1 << '\n';
std::cout << local_tm.tm_mday << '\n';
Nach dem Login kopieren

Erweiterte Extraktion:

Während system_clock normalerweise auf der Unix-Zeit basiert, ist seine Genauigkeit oft größer als Sekunden. Um auf die hochauflösenden Komponenten zuzugreifen, verwenden Sie den folgenden Code:

<code class="cpp">using namespace std;
using namespace std::chrono;

int main()
{
    typedef duration<int, ratio_multiply<hours::period, ratio<24> >>::type days;
    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();
    days d = duration_cast<days>(tp);
    tp -= d;
    hours h = duration_cast<hours>(tp);
    tp -= h;
    minutes m = duration_cast<minutes>(tp);
    tp -= m;
    seconds s = duration_cast<seconds>(tp);
    tp -= s;

    cout << d.count() << "d " << h.count() << ':'
         << m.count() << ':' << s.count();
    cout << " " << tp.count() << "["
         << system_clock::duration::period::num << '/'
         << system_clock::duration::period::den << "]\n";
}
Nach dem Login kopieren

Durch Konvertieren des time_point in Tage, Stunden, Minuten, Sekunden und Extrahieren des Bruchteils einer Sekunde gibt dieser Code Folgendes aus:

15806d 20:31:14 598155[1/1000000]
Nach dem Login kopieren

Bibliothekslösungen:

Die Nur-Header-Datumsbibliothek vereinfacht diesen Prozess und ermöglicht die Extraktion mit dem folgenden Code:

<code class="cpp">#include "date.h"

int main()
{
    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));

    std::cout << "year        = " << ymd.year() << '\n';
    std::cout << "month       = " << ymd.month() << '\n';
    std::cout << "day         = " << ymd.day() << '\n';
    std::cout << "hour        = " << time.hours().count() << "h\n";
    std::cout << "minute      = " << time.minutes().count() << "min\n";
    std::cout << "second      = " << time.seconds().count() << "s\n";
    std::cout << "millisecond = " << time.subseconds().count() << "ms\n";
}
Nach dem Login kopieren

C 20-Integration:

In C 20 ist eine vorgeschlagene Syntax zum Extrahieren dieser Felder mit system_clock::time_point:

<code class="cpp">#include <chrono>

int main()
{
    using namespace std::chrono;
    auto tp = system_clock::now();
    auto dp = floor<days>(tp);
    year_month_day ymd{dp};
    hh_mm_ss time{floor<milliseconds>(tp - dp)};
    auto y = ymd.year();
    auto m = ymd.month();
    auto d = ymd.day();
    auto h = time.hours();
    auto M = time.minutes();
    auto s = time.seconds();
    auto ms = time.subseconds();
}</code>
Nach dem Login kopieren

Zusätzlich können Sie eine bevorzugte Zeit angeben Zone für die Extraktion.

Das obige ist der detaillierte Inhalt vonWie extrahieren Sie bestimmte Datums- und Zeitkomponenten wie Jahr, Monat, Tag, Stunden, Minuten, Sekunden und Millisekunden aus einem „std::chrono::time_point'-Objekt in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!