Hora del sistema de impresión en C++

Jinku Hu 12 octubre 2023
  1. Utilice std::chrono::system_clock y std::ctime para imprimir la hora del sistema en C++
  2. Utilice time, localtime y strftime para imprimir la hora del sistema en C++
Hora del sistema de impresión en C++

Este artículo explicará varios métodos de cómo imprimir la hora del sistema en C++.

Utilice std::chrono::system_clock y std::ctime para imprimir la hora del sistema en C++

std::chrono::system_clock representa el reloj de pared de todo el sistema y proporciona dos funciones para convertir a/desde el tipo std::time_t. El último objeto lo podemos procesar usando la función ctime y devolver una cadena terminada en nulo de la forma -Wed Jun 30 21:49:08 1993\n. En este caso, construimos una función separada para encapsular ambas llamadas y devolver el valor de la cadena a la persona que llama. Observe que también eliminamos el carácter de nueva línea para devolver el valor en una forma más flexible. Además, system_clock::now se usa para recuperar el punto de tiempo actual.

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

Producción :

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

También se puede utilizar el mismo método para mostrar el valor de Época en una forma similar, como se demuestra en el siguiente ejemplo. Tenga en cuenta que, por lo general, Epoch es el 1 de enero de 1970 para los sistemas POSIX/UNIX, pero no es necesario que tenga el mismo valor para los diferentes relojes proporcionados en la biblioteca 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;
}

Producción :

Epoch: Thu Jan  1 00:00:00 1970

Utilice time, localtime y strftime para imprimir la hora del sistema en C++

Alternativamente, podemos usar la función específica POSIX - time y recuperar directamente la estructura time_t. time_t es esencialmente un número entero que almacena el número de segundos desde la Época. De manera similar al método anterior, podemos usar ctime para convertir a la cadena de forma predefinida o llamar a la función localtime. La función localtime convierte el objeto time_t en la estructura tm, que es el formato de tiempo desglosado que se puede utilizar para formatear la cadena de salida como deseamos con especificadores especiales. El formateo se realiza mediante la función strftime que toma cuatro parámetros, el último de los cuales es el puntero a struct tm. El primer argumento especifica la dirección de memoria donde se almacenará la cadena de caracteres, y los dos argumentos siguientes son el tamaño máximo de la cadena y el especificador de formato. La descripción detallada de la especificación de formato se puede ver en esta página.

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

Producción :

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

Artículo relacionado - C++ Time