Stampa l'ora di sistema in C++

Jinku Hu 12 ottobre 2023
  1. Usa std::chrono::system_clock e std::ctime per stampare l’ora di sistema in C++
  2. Usa time, localtime e strftime per stampare l’ora di sistema in C++
Stampa l'ora di sistema in C++

Questo articolo spiegherà diversi metodi su come stampare l’ora di sistema in C++.

Usa std::chrono::system_clock e std::ctime per stampare l’ora di sistema in C++

std::chrono::system_clock rappresenta l’orologio da parete a livello di sistema e fornisce due funzioni per convertire in / dal tipo std::time_t. Quest’ultimo oggetto possiamo elaborare usando la funzione ctime e restituire una stringa con terminazione null della forma -Wed Jun 30 21:49:08 1993\n. In questo caso, costruiamo una funzione separata per incapsulare entrambe le chiamate e restituire il valore stringa al chiamante. Si noti che rimuoviamo anche il nuovo carattere di riga per restituire il valore in una forma più flessibile. Inoltre, system_clock::now è usato per recuperare il punto temporale corrente.

#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;
}

Produzione:

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

È anche possibile utilizzare lo stesso metodo per visualizzare il valore Epoch in una forma simile, come dimostrato nell’esempio seguente. Notare che Epoch è di solito il 1 gennaio 1970 per i sistemi POSIX/UNIX, ma non è necessario che sia lo stesso valore per i diversi orologi forniti nella libreria 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;
}

Produzione:

Epoch: Thu Jan  1 00:00:00 1970

Usa time, localtime e strftime per stampare l’ora di sistema in C++

In alternativa, possiamo usare la funzione specifica di POSIX - time e recuperare direttamente la struttura time_t. time_t è essenzialmente un numero intero che memorizza il numero di secondi trascorsi dall’Epoch. Analogamente al metodo precedente, possiamo usare ctime per convertire nella stringa di forma predefinita o chiamare la funzione localtime. La funzione localtime converte l’oggetto time_t nella struttura tm, che è il formato dell’ora scomposto che può essere utilizzato per formattare la stringa di output come desideriamo con specificatori speciali. La formattazione viene eseguita dalla funzione strftime che accetta quattro parametri, l’ultimo dei quali è il puntatore a struct tm. Il primo argomento specifica l’indirizzo di memoria in cui verrà archiviata la stringa di caratteri e i due argomenti successivi sono la dimensione massima della stringa e l’identificatore di formato. La panoramica dettagliata della specifica del formato è disponibile in questa pagina.

#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;
}

Produzione:

2021-04-02 05:42:46
Autore: 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

Articolo correlato - C++ Time