Java php Javascript C/C++

Um Programa Console que Utiliza Funções de Data, Hora e Calendário C/C++

     O programa solicita dados de entrada digitados no console da tela de entrada pelo usuário e pede uma data de calendário aonde é informado um numeral indicando um dia, mês e ano ele exibe como resultado dados de saída informando o dia da semana, se este dia é útil ou fim de semana e o intervalo de dias entre o valor informado e a data atual do momento da invocação do programa.

O código do exemplo é apresentado abaixo e um comentário quanto a sua elaboração feita na seção posterior ao exemplo.

/* As principais expressoes os tipos de dados e as funcoes definidas neste exemplo : time_t, struct tm, time, mktime, difftime estao descritas em um arquivo time.h */ #include "stdio.h" #include "stdlib.h" #include "time.h" #include "io.h" int main () { time_t rawtime; struct tm * timeinfo; int year, month ,day; const char * weekday[] = { "Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado"}; printf ("Informe uma data de calendario qualquer o dia, mes e o ano !?\n"); printf ("\nDia ? "); scanf ("%d",&day); printf ("Mes ? "); scanf ("%d",&month); printf ("Ano ? "); scanf ("%d",&year); /* obtem o horario em timeinfo atual e modifica para o fuso horario local*/ timeinfo = localtime ( &rawtime ); timeinfo->tm_year = year - 1900; timeinfo->tm_mon = month - 1; timeinfo->tm_mday = day; /* chamada da funcao mktime: timeinfo->tm_wday sera ajustado e montado a hora */ mktime ( timeinfo ); printf ("Esse dia da semana e %s.\n\n", weekday[timeinfo->tm_wday]); int id = timeinfo->tm_wday; if(id == 0 || id == 6){ printf ("E um fim de semana.\n\n"); }else{ printf ("Nao e um fim de semana.\n\n"); } time_t timer; struct tm y2k = {0}; double seconds; /* a primeira linha define a entrada de valores para o inicio do programa aonde a hora 00:00:00 e inicializada nestas variaveis, a segunda ajusta para o valor de entrada do usuario e esta definida em termos do ano 2000, o intervalo dos valores validos para o programa de meses entre 0 e 11, dias entre 1 e 31 e dia do ano entre 0 e 365 */ y2k.tm_hour = 0; y2k.tm_min = 0; y2k.tm_sec = 0; y2k.tm_year = 100+(year-2000); y2k.tm_mon = month-1; y2k.tm_mday = day; time(&timer); /* obtem do sistema operacional o horario atual; */ /* dividir por 86400 transformando os segundos em dias */ seconds = difftime(mktime(&y2k),timer)/86400; /* a divisao maior do que zero o intervalo de dias ainda por vir em uma data futura a divisao com resultado negativo o intervalo de dias passado anterior ao momento de invocacao do programa */ if(seconds > 0){ printf ("%.f dias faltao a partir da data atual ate a data informada \n\n", seconds); }else{ printf ("%.f dias se passaram a partir da data informada ate a data atual \n\n", seconds *(-1)); } system("PAUSE"); return 0; }

    Exemplo de linha de comando para o compilação utilizando o programa Opensource gcc.

    c:\gcc horadifcalc.c -o horadifcalc.exe

    O arquivo time.h que e incluído na compilação do programa contém quase todas as variáveis e funções descritas no programa e que aparentemente não tem uma explicação no próprio código do mesmo. Incluem tipos de dados inteiro, constante, ponto flutuante e estrutura, a variável time_t faz parte da estrutura timespec que consiste em um temporizador em segundos; a declaração da variável struc tm *timeinfo declara a estrutura tm que inclui pelo menos os seguintes membros: int tm_sec Segundos [0,60], int tm_min Minutos [0,59], int hora_hora_hora [0,23], int tm_mday Dia do mês [1,31], int tm_mon Mês do ano [0,11], int tm_year Anos desde 1900, int tm_wday Dia da semana [0,6] (domingo = 0), int tm_yday Dia do ano [0,365] e int tm_isdst Sinalizador de horário de verão é também declarado um vetor de caracteres em const char * weekday[] que ordena os caracateres representativvos do nome dos dias da semana.

    As funções printf e scanf respectivamente escreve o texto de apresentação e orienta sobre os valores das variáveis solicitadas pelo programa a segunda função passa estes valores digitados do console para as variáveis day, month e year. A expressão timeinfo = localtime ( &rawtime ); compõe uma informação de hora, minutos e seguntos também necessário ao correto funcionamento da função mktime ( timeinfo ); que irá montar e formatar a informação da date e hora aonde finalmente é selecionado na variável tm_wday um inteiro representativo do dia da semana e passado a expressão weekday[timeinfo->tm_wday] para a conversão em caracteres e a sua impressão.

    O código do programa int id = timeinfo->tm_wday; passa para a variável inteira id o número de 0 até seis representativo do nome do dia da semana a comparação indica se o dia entrado pelo usuário é um dia útil ou final de semana.

    Na continuação do exemplo declara as variáveis time_t timer; e struct tm y2k = {0}; de uma forma que não utilizamos o tipo de dado ponteiro como na primeira parte do programa os operadores seta e ponto são utilizados para fazer referência aos elementos da estrutura tm. A expressão y2k.tm_hour = 0; y2k.tm_min = 0; y2k.tm_sec = 0; passa a informação de uma hora fixa na inicialização do programa sendo necessário uma valor referencial de hora para compor parte dos dados da estruruta citada na linha anterior; os valores de entrada digitados pelo usuário são novamente aproveitados e formatados na expressão y2k.tm_year = 100+(year-2000); y2k.tm_mon = month-1; y2k.tm_mday = day; composto por variáveis inteiras. A função time(&timer); obtém do sistema operacional o horário atual composto pela informação da hora e dia, mês e ano; a variável seconds retém o resultado da utilização da função difftime na expressão do código do programa seconds = difftime(mktime(&y2k),timer)/86400; a divisão por 86400 converte o tempo de segundos para um valor inteiro de dias. O valor do numeral dos segundos na variável seconds avaliado se for negativo refere-se a um tempo passado anterior ao informado pelo usuário caso contrário valor positivo a um dia de calendário posterior a data de inicialização do programa consistindo em dados do programa impresso por último como informação impressa e exibida na tela de console do programa.