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
Libérer: 2024-11-26 12:11:10
original
1051 Les gens l'ont consulté

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));
Copier après la connexion

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));
Copier après la connexion

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;
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal