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