Imprimir hora do sistema em C++

Jinku Hu 12 outubro 2023
  1. Use std::chrono::system_clock e std::ctime para imprimir a hora do sistema em C++
  2. Use time, localtime e strftime para imprimir a hora do sistema em C++
Imprimir hora do sistema em C++

Este artigo explicará vários métodos de como imprimir a hora do sistema em C++.

Use std::chrono::system_clock e std::ctime para imprimir a hora do sistema em C++

std::chrono::system_clock representa o relógio de parede de todo o sistema e fornece duas funções para converter para / do tipo std::time_t. Podemos processar o último objeto usando a função ctime e retornar uma string terminada em nulo na forma - Wed Jun 30 21:49:08 1993\n. Neste caso, construímos uma função separada para encapsular ambas as chamadas e retornar o valor string para o chamador. Observe que também removemos o caractere de nova linha para retornar o valor de uma forma mais flexível. Além disso, system_clock::now é usado para recuperar o ponto de tempo atual.

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

Resultado:

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

Também se pode utilizar o mesmo método para exibir o valor da época em uma forma semelhante, conforme demonstrado no exemplo a seguir. Observe que Epoch é geralmente 1º de janeiro de 1970 para sistemas POSIX/UNIX, mas não é necessário que seja o mesmo valor para diferentes relógios fornecidos na 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;
}

Resultado:

Epoch: Thu Jan  1 00:00:00 1970

Use time, localtime e strftime para imprimir a hora do sistema em C++

Alternativamente, podemos usar a função específica POSIX - time e recuperar diretamente a estrutura time_t. time_t é essencialmente um número inteiro que armazena o número de segundos desde a época. Similarmente ao método anterior, podemos usar ctime para converter para a string de forma predefinida ou chamar a função localtime. A função localtime converte o objeto time_t na estrutura tm, que é o formato de hora dividido que pode ser utilizado para formatar a string de saída como desejarmos com especificadores especiais. A formatação é feita pela função strftime que leva quatro parâmetros, o último dos quais é o ponteiro para struct tm. O primeiro argumento especifica o endereço da memória onde a string de caracteres será armazenada e os próximos dois argumentos são o tamanho máximo da string e o especificador de formato. A visão geral detalhada da especificação do formato pode ser vista nesta 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;
}

Resultado:

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

Artigo relacionado - C++ Time