Ejemplo de diversas funciones utilizando la librería Time.h en lenguaje C.
Enlace CodePad
http://codepad.org/Gw1NNjeC
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Código Fuente
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#include <stdio.h>
#include <time.h>
void conta_atras (int segundos);
void pausa_segundos (float segundos );
void diferencia_tempos (void);
void vaf_segundos_desde_01_01_1970 (void);
void dia_hora_local (void);
void exemplo_ctime (void);
void exemplo_asctime (void);
int vaf_aleatorio_entre (int minimo, int maximo);
void exemplo_mktime (void);
void main ()
{
printf("\nExemplo ctime:\n");
exemplo_ctime();
printf("\nExemplo asctime:\n");
exemplo_asctime ();
printf("\nExemplo dia_hora_local:\n");
dia_hora_local ();
printf("\nExemplo vaf_segundos_desde_01_01_1970:\n");
vaf_segundos_desde_01_01_1970 ();
printf("\nExemplo pausa_segundos con 2,5 segundos:\n");
pausa_segundos ( 2.5 );
printf("\nExemplo aleatorio entre dous numeros utilizando time para inicializar xerador de numeros aleatorios:\n");
printf("O valor aleatorio xerado e: %d\n", vaf_aleatorio_entre (500, 600));
printf("\nExemplo conta_atras:\n");
conta_atras (10);
printf("\nExemplo diferencia_tempos:\n");
diferencia_tempos ();
printf("\nExemplo mktime:\n");
exemplo_mktime ();
}
//Mediante asctime obtense unha cadea de texto a partir de un struct tm
void exemplo_asctime ()
{
time_t tempo_segundos;
struct tm * timeinfo;
time ( &tempo_segundos );
timeinfo = localtime ( &tempo_segundos );
//asctime pasa a texto a data e a hora pero so en ingles
//actua como ctime pero recive un struc tm
printf ( "A data e hora locais son: %s", asctime (timeinfo) );
}
void exemplo_ctime ()
{
time_t tempo_segundos;
time ( &tempo_segundos );
//pasa a texto a data e a hora pero so en ingles
//actua como asctime pero recive un timet (segundos dende 1900
printf ( "Segundos %d\n", tempo_segundos );
printf ( "A data e hora locais son: %s", ctime (&tempo_segundos) );
}
//Mediante ctime obtense unha cadea de texto a partir de un time_t
//obten o dia e a hora local partindo de datos GMT
void dia_hora_local ()
{
time_t tempo_segundos;
struct tm * timeinfo;
struct tm * timeinfo2;
//executando tzset rellenase tzname con datos de zona horaria, senon so iniciais GMT EWT
tzset ();
printf("%s\n%s\n%d\n%d\n", tzname[0],tzname[1], timezone, daylight);
tempo_segundos = time ( NULL );
timeinfo = localtime ( &tempo_segundos);
timeinfo2 = gmtime ( &tempo_segundos );
printf ("%d\n",tempo_segundos);
printf ("%d\n",tempo_segundos);
printf("Hora GMT: %02d/%02d/%d %02d:%02d:%02d\n", timeinfo->tm_mday, timeinfo->tm_mon+1, timeinfo->tm_year+1900, timeinfo->tm_hour,timeinfo->tm_min,timeinfo->tm_sec);
printf("Hora GMT: %02d/%02d/%d %02d:%02d:%02d\n", timeinfo2->tm_mday, timeinfo2->tm_mon+1, timeinfo2->tm_year+1900, timeinfo2->tm_hour,timeinfo2->tm_min,timeinfo2->tm_sec);
printf("Hora local: %02d/%02d/%d %02d:%02d:%02d\n", timeinfo2->tm_mday, timeinfo2->tm_mon+1, timeinfo2->tm_year+1900, timeinfo2->tm_hour-(((1+daylight)*(timezone))/3600),timeinfo2->tm_min,timeinfo2->tm_sec);
/*
The meaning of each is:
Member Meaning Range
tm_sec seconds after the minute 0-61*
tm_min minutes after the hour 0-59
tm_hour hours since midnight 0-23
tm_mday day of the month 1-31
tm_mon months since January 0-11
tm_year years since 1900
tm_wday days since Sunday 0-6
tm_yday days since January 1 0-365
tm_isdst Daylight Saving Time flag
*/
}
//Indica cantos segundos pasaron dende o 1 de Xaneiro de 1970 que se corresponde co devolto pola funcion time()
void vaf_segundos_desde_01_01_1970 ()
{
time_t segundos_desde_01_01_1970;
segundos_desde_01_01_1970 = time (NULL);
printf ("%d Horas dende o 1 de Xaneiro de 1970", segundos_desde_01_01_1970/3600);
}
//utiliza a funcion time para obter o número de segundos entre dous eventos
void diferencia_tempos (void)
{
time_t inicio,fin;
char texto_teclado [50];
double diferencia;
time (&inicio);
printf ("Excribe o teu nome e direiche canto tardas en escribilo: ");
gets (texto_teclado);
time (&fin);
//diferencia = difftime (fin,inicio);
diferencia = fin - inicio;
printf ("Hola %s.\n", texto_teclado);
printf ("Levouche %.2f segundos escribir o teu nome.\n", diferencia );
}
//conta os ciclos de reloxo para xerar unha pausa
void pausa_segundos ( float segundos )
{
clock_t fin_pausa;
fin_pausa = clock () + (segundos * CLOCKS_PER_SEC);
while (clock() < fin_pausa);
}
//utiliza a funcion pausa_segundos() para realizar unha conta atrás
void conta_atras (int segundos)
{
int n;
printf ("Iniciando Conta Atras...\n");
for (n=segundos; n>0; n--)
{
printf ("%d\n",n);
pausa_segundos (1);
}
printf ("DESPEGUE!!!\n");
}
//Usa time(NULL) para inicializar un xerador de numeros aleatorios, e obtén un número entre dous valores pasados como parámetros
int vaf_aleatorio_entre (int minimo, int maximo)
{
// Inicizase o xerador de números aleatorios
srand ( time(NULL) );
// Xeramos un número aleatorio entre minimo e maximo
return rand () % (maximo-minimo+1) + minimo;
}
void exemplo_strftime (void)
{
time_t rawtime;
struct tm * timeinfo;
char buffer [80];
time ( &rawtime );
timeinfo = localtime ( &rawtime );
strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
puts (buffer);
/*
specifier Replaced by Example
%a Abbreviated weekday name * Thu
%A Full weekday name * Thursday
%b Abbreviated month name * Aug
%B Full month name * August
%c Date and time representation * Thu Aug 23 14:55:02 2001
%d Day of the month (01-31) 23
%H Hour in 24h format (00-23) 14
%I Hour in 12h format (01-12) 02
%j Day of the year (001-366) 235
%m Month as a decimal number (01-12) 08
%M Minute (00-59) 55
%p AM or PM designation PM
%S Second (00-61) 02
%U Week number with the first Sunday as the first day of week one (00-53) 33
%w Weekday as a decimal number with Sunday as 0 (0-6) 4
%W Week number with the first Monday as the first day of week one (00-53) 34
%x Date representation * 08/23/01
%X Time representation * 14:55:02
%y Year, last two digits (00-99) 01
%Y Year 2001
%Z Timezone name or abbreviation CDT
%% A % sign %
*/
}
//Usando mktime, obter o dia da semana en texto (luns, martes...)
void exemplo_mktime ()
{
time_t tempo_segundos;
struct tm * timeinfo;
int anno, mes ,dia;
char * dia_seman_texto[] = { "Domingo", "Luns", "Martes", "Mercores", "Xoves", "Venres", "Sabado"};
/* Pidense datos de entrada */
printf ("Introduce o ano: "); scanf ("%d",&anno);
printf ("Introduce o mes: "); scanf ("%d",&mes);
printf ("Introduce o dia: "); scanf ("%d",&dia);
/* collese o tempo actual e modificanse os datos da data para evitar que mktime de un
erro o non ter a estructura cuberta de todo */
time ( &tempo_segundos );
timeinfo = localtime ( &tempo_segundos );
timeinfo->tm_year = anno - 1900;
timeinfo->tm_mon = mes - 1;
timeinfo->tm_mday = dia;
/* chamando a mktime: timeinfo->tm_wday incluira o número de dia da seman */
mktime ( timeinfo );
printf ("A data introcucica corresponde a un %s.\n", dia_seman_texto[timeinfo->tm_wday]);
}