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
Lepaskan: 2024-11-26 12:11:10
asal
1052 orang telah melayarinya

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

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

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

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!

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