A formatação de data-hora em sua forma clássica envolve a biblioteca <ctime> para
captura da data-hora local para a formatação com a função strftime no estilo-C:
Sintaxe
size_t strftime( char* str, std::size_t count, const char* format, const std::tm* tp );
Onde
str: string/buffer de destino da formatação
count: quantidade de bytes para escrever em str incluindo \n
format: string contendo identificadores de formatação
tp: struct contendo data-hora
Identificadores
%Y: Ano, 4-dígitos
%m: Mês, 01-12
%d: Dia do mês, 01-31
%H: Hora, 24h, 00-23
%I: Hora, 12h 01-12
%M: Minutos, 00-59
%S: Segundos, 00-59
Exemplo 10
#include
#include
using namespace std;
int main() {
time_t dataHora= std::time(nullptr); // data-hora do sistema
tm* dataHoraLocal= std::localtime(&dataHora); // data em formato local
char dataFormatada[80]; //buffer
//formata data em string: DD-MM-YYYY HH:MM:SS
strftime(dataFormatada, sizeof(dataFormatada), "%d-%m-%Y %H:%M:%S", time_info);
Saída
11-06-2026 18:36:05
Em C++ 11 a 19, podemos utilizar <chrono>, <ctime> e <iomanip> para converter e formatar
uma data-hora via função put_time da biblioteca <iomanip> como pode ser conferido no exemplo
a seguir:
Exemplo 11
#include <iostream>
#include <chrono>
#include <iomanip> //put_time
#include <ctime> //time_t, tm
using namespace std;
int main()
{
auto dataHora = chrono::system_clock::now(); //recupera datahora corrente do sistema
time_t dataHoraC= chrono::system_clock::to_time_t(dataHora ); //converte no estilo-c time_t
tm* dataHoraLocal= std::localtime(&dataHoraC);//converte para data-hora local
//formata data hora DD-MM-YYYY HH:MM:SS
std::cout << std::put_time(dataHoraLocal, "%d-%m-%Y %H:%M:%S") << endl;
}
Saída
11-06-2026 18:36:51
A partir de C++ 20, essa formatação ficou muito mais limpa e simples de ser feita utilizando
a função format da biblioteca <format>. No exemplo abaixo, recuperamos a data-hora
corrente utilizando o método now da biblioteca <chrono>.
Sintaxe
string format( std::format_string fmt, Args&&... args );
Onde
fmt: string contendo identificadores de formatação
args: argumentos para formatação
Exemplo 12
#include <iostream>
#include <chrono>
#include <format>
using namespace std;
int main()
{
// Get the current system time
auto dataHora= chrono::system_clock::now(); //data hora corrente do sistema
//Formata data DD-MM-YYYY HH:MM:SS
string dataHoraFormatada= format("{:%d-%m-%Y}", dataHora);
cout << dataHoraFormatada << endl;
}
Saída
11-06-2026