Exibindo data e hora com time.h e localtime

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