Maison >développement back-end >C++ >Comment puis-je analyser les chaînes de dates historiques et calculer le temps écoulé à l'aide de « std::chrono » de C 11 ?

Comment puis-je analyser les chaînes de dates historiques et calculer le temps écoulé à l'aide de « std::chrono » de C 11 ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-26 12:11:101043parcourir

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

Analyse des chaînes de dates historiques dans les représentations de dates C 11

Cette question explore les possibilités d'analyse des chaînes de dates historiques à l'aide de std::chrono de C 11 espace de noms. L'objectif est de calculer le temps écoulé depuis une date donnée, avec des exigences spécifiques pour accéder aux données en termes de secondes, minutes, heures et jours.

std::chrono Approach

Comme demandé, std::chrono fournit une solution potentielle pour cette tâche. Voici une répartition utilisant le format de chaîne de date fourni :

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));

Ce code initialise une structure std::tm (tm), analyse la chaîne de date à l'aide de std::get_time (disponible à partir de GCC 5 et versions ultérieures), et convertit les données analysées en un std::chrono::time_point (tp).

Alternative pour Pré-GCC 5

Avant GCC 5, std::get_time n'est pas disponible. Dans ce cas, une alternative existe :

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() effectue l'analyse, et le processus suit ensuite les mêmes étapes qu'avec std::get_time.

Extraction du temps Composantes de durée

Une fois le tp obtenu, le code peut calculer le décalage horaire et extraire les différents composants :

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;

Ces valeurs représentent l'intervalle de temps depuis la date donnée en termes de jours, heures, minutes et secondes.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn