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

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

Barbara Streisand
Barbara Streisandasal
2024-11-26 12:11:101043semak imbas

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

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!

Kenyataan:
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