Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menghuraikan Rentetan Tarikh Bersejarah dan Mengira Masa Berlalu Menggunakan `std::chrono` C 11?
Menghuraikan Rentetan Tarikh Bersejarah ke dalam Perwakilan Tarikh C 11
Soalan ini meneroka kemungkinan menghuraikan rentetan tarikh sejarah menggunakan std::chrono C 11 ruang nama. Matlamatnya adalah untuk mengira masa berlalu sejak tarikh tertentu, dengan keperluan khusus untuk mengakses data dari segi saat, minit, jam dan hari.
std::chrono Approach
Seperti yang ditanya, std::chrono menyediakan penyelesaian yang berpotensi untuk tugas ini. Berikut ialah pecahan menggunakan format rentetan tarikh yang disediakan:
std::tm tm = {}; std::stringstream ss("Jan 9 2014 12:35:34"); ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S"); auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));
Kod ini memulakan std::tm struct (tm), menghuraikan rentetan tarikh menggunakan std::get_time (tersedia daripada GCC 5 dan kemudian), dan menukar data yang dihuraikan menjadi std::chrono::time_point (tp).
Alternatif untuk Pra-GCC 5
Sebelum GCC 5, std::get_time tidak tersedia. Dalam kes ini, alternatif wujud:
strptime("Thu Jan 9 2014 12:35:34", "%a %b %d %Y %H:%M:%S", &tm); auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));
strptime() menyelesaikan penghuraian, dan proses itu kemudian mengikuti langkah yang sama seperti std::get_time.
Mengekstrak Masa Komponen Tempoh
Setelah tp diperoleh, kod boleh mengira perbezaan masa dan mengekstrak pelbagai komponen:
auto elapsed = std::chrono::duration_cast<std::chrono::seconds>( std::chrono::system_clock::now() - tp ); uint64_t days = elapsed.count() / 60 / 60 / 24; uint64_t hours = (elapsed.count() / 60 / 60) % 24; uint64_t minutes = (elapsed.count() / 60) % 60; uint64_t seconds = elapsed.count() % 60;
Nilai ini mewakili selang masa sejak tarikh yang diberikan dari segi hari, jam, minit dan saat.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghuraikan Rentetan Tarikh Bersejarah dan Mengira Masa Berlalu Menggunakan `std::chrono` C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!