Imprimer l'heure du système en C++

Jinku Hu 12 octobre 2023
  1. Utilisez std::chrono::system_clock et std::ctime pour imprimer l’heure système en C++
  2. Utilisez time, localtime et strftime pour imprimer l’heure système en C++
Imprimer l'heure du système en C++

Cet article explique plusieurs méthodes d’impression de l’heure système en C++.

Utilisez std::chrono::system_clock et std::ctime pour imprimer l’heure système en C++

std::chrono::system_clock représente l’horloge murale du système et fournit deux fonctions pour convertir vers / depuis le type std::time_t. Nous pouvons traiter ce dernier objet en utilisant la fonction ctime et renvoyer une chaîne terminée par un nul de la forme -Wed Jun 30 21:49:08 1993\n. Dans ce cas, nous construisons une fonction distincte pour encapsuler les deux appels et renvoyer la valeur string à l’appelant. Notez que nous supprimons également le caractère de nouvelle ligne pour renvoyer la valeur sous une forme plus flexible. De plus, system_clock::now est utilisé pour récupérer le point de temps actuel.

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  auto time_p = std::chrono::system_clock::now();
  cout << "Current time: " << timeToString(time_p) << endl;

  return EXIT_SUCCESS;
}

Production:

Current time: Fri Apr  1 01:34:20 2021

On peut également utiliser la même méthode pour afficher la valeur Epoch sous une forme similaire, comme illustré dans l’exemple suivant. Notez que, Epoch est généralement le 1er janvier 1970 pour les systèmes POSIX/UNIX, mais il n’est pas nécessaire que ce soit la même valeur pour les différentes horloges fournies dans la bibliothèque chrono.

#include <sys/time.h>

#include <chrono>
#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

std::string timeToString(std::chrono::system_clock::time_point &t) {
  std::time_t time = std::chrono::system_clock::to_time_t(t);
  std::string time_str = std::ctime(&time);
  time_str.resize(time_str.size() - 1);
  return time_str;
}

int main() {
  std::chrono::system_clock::time_point time_p2;
  cout << "Epoch: " << timeToString(time_p2) << endl;

  return EXIT_SUCCESS;
}

Production:

Epoch: Thu Jan  1 00:00:00 1970

Utilisez time, localtime et strftime pour imprimer l’heure système en C++

Alternativement, nous pouvons utiliser la fonction spécifique de POSIX - time et récupérer directement la structure time_t. time_t est essentiellement un entier qui stocke le nombre de secondes depuis l’Époque. De la même manière que la méthode précédente, on peut utiliser ctime pour convertir en chaîne de forme prédéfinie ou appeler la fonction localtime. La fonction localtime convertit l’objet time_t en structure tm, qui est le format de temps décomposé qui peut être utilisé pour formater la chaîne de sortie comme nous le souhaitons avec des spécificateurs spéciaux. Le formatage se fait par la fonction strftime qui prend quatre paramètres dont le dernier est le pointeur vers struct tm. Le premier argument spécifie l’adresse mémoire où la chaîne de caractères sera stockée, et les deux arguments suivants sont la taille maximale de la chaîne et le spécificateur de format. L’aperçu détaillé de la spécification de format peut être vu sur cette page.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;
using std::string;

int main() {
  char tt[100];
  time_t now = time(nullptr);
  auto tm_info = localtime(&now);

  strftime(tt, 100, "%Y-%m-%d %H:%M:%S", tm_info);
  puts(tt);

  return EXIT_SUCCESS;
}

Production:

2021-04-02 05:42:46
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Article connexe - C++ Time