Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah anda mengekstrak komponen tarikh dan masa tertentu, seperti tahun, bulan, hari, jam, minit, saat dan milisaat, daripada objek `std::chrono::time_point` dalam C ?

Bagaimanakah anda mengekstrak komponen tarikh dan masa tertentu, seperti tahun, bulan, hari, jam, minit, saat dan milisaat, daripada objek `std::chrono::time_point` dalam C ?

Barbara Streisand
Lepaskan: 2024-10-30 07:59:27
asal
861 orang telah melayarinya

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  ?

Mengekstrak Komponen Tarikh dan Masa daripada std::chrono::time_point

Masalah:

Bagaimana kita boleh mendapatkan semula tertentu komponen tarikh dan masa, seperti tahun, bulan, hari, jam, minit, saat dan milisaat, daripada objek std::chrono::time_point?

Penyelesaian:

Untuk mengekstrak maklumat ini, kita mesti menggunakan system_clock::time_point kerana ia adalah satu-satunya jam yang dibekalkan sistem yang mempunyai sambungan kepada kalendar sivil.

<code class="cpp">system_clock::time_point now = system_clock::now();</code>
Salin selepas log masuk

Menukar kepada Cap Masa :

Seterusnya, tukarkan titik_masa kepada masa_t:

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

Mengekstrak Komponen:

Menggunakan perpustakaan C, tukar time_t kepada tm, menyatakan sama ada anda mahu penukaran dalam UTC atau zon waktu tempatan:

<code class="cpp">tm utc_tm = *gmtime(&tt);
tm local_tm = *localtime(&tt);</code>
Salin selepas log masuk

Kini, anda boleh mencetak komponen tm:

<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';
Salin selepas log masuk

Pengekstrakan Lanjutan:

Walaupun system_clock biasanya berdasarkan masa Unix, ketepatannya selalunya lebih besar daripada saat. Untuk mengakses komponen resolusi tinggi, gunakan kod berikut:

<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";
}
Salin selepas log masuk

Dengan menukar titik_masa kepada hari, jam, minit, saat dan mengekstrak pecahan saat, kod ini mengeluarkan:

15806d 20:31:14 598155[1/1000000]
Salin selepas log masuk

Penyelesaian Perpustakaan:

Pustaka tarikh pengepala sahaja memudahkan proses ini, membenarkan pengekstrakan dengan kod berikut:

<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";
}
Salin selepas log masuk

Penyepaduan C 20:

Dalam C 20, sintaks yang dicadangkan disertakan untuk mengekstrak medan ini menggunakan 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>
Salin selepas log masuk

Selain itu, anda boleh menentukan masa pilihan zon untuk pengekstrakan.

Atas ialah kandungan terperinci Bagaimanakah anda mengekstrak komponen tarikh dan masa tertentu, seperti tahun, bulan, hari, jam, minit, saat dan milisaat, daripada objek `std::chrono::time_point` dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan