Bagaimanakah saya boleh mengekstrak unsur temporal individu seperti tahun, bulan, hari, jam, minit, saat dan milisaat daripada objek std::chrono::time_point?

Mary-Kate Olsen
Lepaskan: 2024-11-01 06:05:02
asal
505 orang telah melayarinya

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

Mengekstrak Elemen Temporal daripada std::chrono::time_point

Pertanyaan:

Bagaimanakah saya boleh mengekstrak unsur temporal tertentu, seperti tahun, bulan, hari, jam, minit, saat dan milisaat, daripada objek std::chrono::time_point?

Resolusi:

Untuk mengekstrak elemen ini daripada titik_masa, anda mesti menggunakan jam_sistem::titik_masa, kerana ia mempunyai hubungan dengan kalendar sivil. Dapatkan semula system_clock::time_point:

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

Tukar ini kepada nilai time_t:

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

Jika anda memerlukan pengekstrakan masa dalam zon waktu UTC atau zon waktu tempatan, tukar nilai time_t kepada tm:

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

Ekstrak elemen tertentu menggunakan medan yang sepadan bagi struktur tm:

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

Maklumat Dikembangkan:

Sementara menggunakan perpustakaan C membolehkan penukaran masa, adalah penting untuk ambil perhatian bahawa setiap pelaksanaan system_clock adalah berdasarkan masa Unix, biasanya diukur dalam saat sejak 1 Januari 1970 UTC.

Untuk pengekstrakan yang lebih tepat, manfaatkan ketepatan jam_sistem:

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

Cetak hasil dengan unit tempoh yang sesuai:

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

Penambahbaikan Perpustakaan:

Untuk pengekstrakan masa yang dipermudahkan, pertimbangkan untuk menggunakan pustaka C 11/14 seperti tarikh. Ini mengurangkan kod yang diperlukan kepada:

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

C 20 Standard Proposal:

Draf kerja C 20 yang dicadangkan termasuk sintaks langsung untuk mengekstrak medan ini daripada system_clock:: titik_masa:

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

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengekstrak unsur temporal individu seperti tahun, bulan, hari, jam, minit, saat dan milisaat daripada objek std::chrono::time_point?. 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!