Por: Eduardo Casavella
Neste artigo veremos como utilizar o arquivo de cabeçalho time.h da linguagem C para trabalhar com a data e hora atuais do sistema usando localtime() e a struct tm.
No arquivo de cabeçalho time.h. existem funções e tipos de dados para manipular informações de tempo e datas.
O tipo de dados struct tm define uma struct para ser utilizada em funções que trabalham com data e hora.
Abaixo segue uma descrição da struct tm.
struct tm {
int tm_sec; //representa os segundos de 0 a 59
int tm_min; //representa os minutos de 0 a 59
int tm_hour; //representa as horas de 0 a 24
int tm_mday: //dia do mês de 1 a 31
int tm_mon; //representa os meses do ano de 0 a 11
int tm_year; //representa o ano a partir de 1900
int tm_wday; //dia da semana de 0 (domingo) até 6 (sábado)
int tm_yday; // dia do ano de 1 a 365
int tm_isdst; //indica horário de verão se for diferente de zero
};
O tipo de dados time_t é usado para representar o tempo de calendário.
Função localtime
A função localtime recebe um tempo em segundos de uma variável do tipo time_t, converte para o tempo local, armazena os dados na struct e retorna um ponteiro para uma struct do tipo tm com os dados locais.
Para compreender melhor o funcionamento desta estrutura segue o exemplo com um código em linguagem C para manipular os dados da struct tm.
Operador ->
A fim de acessar os membros de uma struct usando o ponteiro utilizamos o operador -> de tal forma que temos a seguinte notação: ponteiro->membro_da_struct.
Veremos em seguida um exemplo prático no código abaixo.
#include <stdio.h>
#include <time.h> //necessário para usar localtime() e struct tm
int main(void)
{
//ponteiro para struct que armazena data e hora
struct tm *data_hora_atual;
//variável do tipo time_t para armazenar o tempo em segundos
time_t segundos;
//obtendo o tempo em segundos
time(&segundos);
//para converter de segundos para o tempo local
//utilizamos a função localtime
data_hora_atual = localtime(&segundos);
//para acessar os membros de uma struct usando o ponteiro
//utilizamos o operador -> no nosso caso temos:
//data_hora_atual->membro_da_struct
//Acessando dados convertidos para a struct data_hora_atual
printf("\nDia..........: %d\n", data_hora_atual->tm_mday);
//para retornar o mês corretamente devemos adicionar +1
//como vemos abaixo
printf("\nMes..........: %d\n", data_hora_atual->tm_mon+1);
//para retornar o ano corretamente devemos adicionar 1900
//como vemos abaixo
printf("\nAno..........: %d\n\n", data_hora_atual->tm_year+1900);
printf("\nDia do ano...: %d\n", data_hora_atual->tm_yday);
printf("\nDia da semana: %d\n\n", data_hora_atual->tm_wday);
/* Obtendo os valores da struct data_hora_atual
e formatando a saída de dados no formato
hora: minuto: segundo
Para não ficar um printf muito longo em uma única linha
de comando, quebrei a impressão em 3 partes mostrando
uma informação em cada linha
*/
printf("\nHora ........: %d:",data_hora_atual->tm_hour);//hora
printf("%d:",data_hora_atual->tm_min);//minuto
printf("%d\n",data_hora_atual->tm_sec);//segundo
/* Obtendo os valores da struct data_hora_atual
e formatando a saída de dados no formato dia/mes/ano
Para não ficar um printf muito longo em uma única
linha de comando, quebrei a impressão em 3 partes
sendo uma informação em cada linha
*/
//dia do mês
printf("\nData ........: %d/", data_hora_atual->tm_mday);
printf("%d/",data_hora_atual->tm_mon+1); //mês
printf("%d\n\n",data_hora_atual->tm_year+1900); //ano
return 0;
}
Abaixo podemos ver este código em execução:

8 respostas a Exibindo data e hora com time.h e localtime