martes, 30 de agosto de 2011

Ejemplos uso libreria time.h

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]);
}

4 comentarios:

  1. Respuestas
    1. Explícame lo que no te funcionó a ver si te puedo ayudar.

      Eliminar
  2. hola amigo yo ocupo 2 librerias de c++ y 5 funciones de cada una y un ejemplo yo quiero presentar la libreria time.h

    ResponderEliminar
    Respuestas
    1. No entiendo, por favor explícate mejor e intentaré ayudarte.

      Eliminar

Related Posts Plugin for WordPress, Blogger...