Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menghuraikan Rentetan Tarikh dan Mengira Masa Berlalu Menggunakan C 11's std::chrono?

Bagaimanakah Saya Boleh Menghuraikan Rentetan Tarikh dan Mengira Masa Berlalu Menggunakan C 11's std::chrono?

Barbara Streisand
Lepaskan: 2024-11-29 22:29:10
asal
546 orang telah melayarinya

How Can I Parse Date Strings and Calculate Elapsed Time Using C  11's std::chrono?

Menghuraikan Rentetan Tarikh dengan C 11 std::chrono

Apabila bekerja dengan maklumat tarikh dan masa, selalunya perlu menghuraikan rentetan tarikh menjadi perwakilan data yang sesuai. Untuk C 11, ruang nama std::chrono menyediakan alatan berkuasa untuk mengendalikan tempoh masa dan titik masa.

Menghuraikan Rentetan Tarikh

Untuk menghuraikan rentetan tarikh ke dalam std: :chrono, GCC menyediakan fungsi std::get_time. Memandangkan objek std::tm dan rentetan format, std::get_time boleh mengekstrak komponen tarikh dan masa daripada rentetan input. Coretan kod berikut menunjukkan perkara ini:

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");
Salin selepas log masuk

Versi GCC sebelum 5 tidak melaksanakan std::get_time. Sebagai alternatif, anda boleh menggunakan strptime:

std::tm tm = {};
strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm);
Salin selepas log masuk

Mengira Masa Berlalu

Setelah anda mempunyai tarikh dan masa yang dihuraikan dalam objek std::tm, anda boleh menukarnya kepada titik_masa menggunakan std::chrono::system_clock::from_time_t:

auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));
Salin selepas log masuk

Time_point ini mewakili tarikh dan masa yang dihuraikan dalam zon waktu semasa. Untuk mengira masa yang berlalu sejak tarikh yang dihuraikan, tolak titik_masa semasa daripada titik_masa yang dihuraikan:

auto now = std::chrono::system_clock::now();
auto elapsed = now - tp;
Salin selepas log masuk

Komponen Masa Mengakses

std::chrono:: objek tempoh menyediakan akses kepada komponen masa berlalu. Untuk mendapatkan semula bilangan saat, minit, jam dan hari, gunakan fungsi berikut:

auto seconds = std::chrono::duration_cast<std::chrono::seconds>(elapsed).count();
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(elapsed).count();
auto hours = std::chrono::duration_cast<std::chrono::hours>(elapsed).count();
auto days = std::chrono::duration_cast<std::chrono::days>(elapsed).count();
Salin selepas log masuk

Dengan menggunakan teknik ini, anda boleh menghuraikan rentetan tarikh dengan berkesan ke dalam titik masa std::chrono dan mengira masa yang telah berlalu masa sejak tarikh yang dihuraikan, menyediakan akses kepada komponen masa yang diingini dengan cara yang mudah dan cekap.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Rentetan Tarikh dan Mengira Masa Berlalu Menggunakan C 11's std::chrono?. 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