elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C] Como usar time.h
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C] Como usar time.h  (Leído 40,770 veces)
Siuto
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Que puedo decir??


Ver Perfil WWW
[C] Como usar time.h
« en: 6 Marzo 2006, 05:52 am »

estuve buscando por internet como se usa esta libreria pero no entendi muy bien lo que lei. Especificamente lo que quiero hacer es obtener el mes(1/12) y el dia(1/31), en numero.

Si alguien me puede decir como se hace esto y si hay algun sitio en internet que explique como se usan sus funciones (No que las nombre con una descripcion como todos los que vi).


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: [C] Como usar time.h
« Respuesta #1 en: 6 Marzo 2006, 14:46 pm »

Un ejemplo sobre como imprimir la fecha actual mediante las funciones que mencionas y tambien de una forma mas "manual" es (C estandar):
Código:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define LONG_CADENA 128

int main(void)
{
   time_t fecha;
   struct tm *temp;
   struct tm fecha_tm;
   char salida[LONG_CADENA];
   
   /* obtener fecha (time_t) */
   if ((fecha = time(NULL)) == (time_t) -1)
      return EXIT_FAILURE;
   
   /* obtener fecha (struct tm) */
   temp = localtime(&fecha);
   memcpy(&fecha_tm, temp, sizeof fecha_tm);
   
   /* imprimir mediante las funciones de la biblioteca time.h */
   printf("%s", ctime(&fecha));
   strftime(salida, LONG_CADENA, "%a %b %d %H:%M:%S %Y\n", &fecha_tm);
   printf("%s", salida);
   
   /* imprimir manualmente */
   printf("        %02d %02d:", fecha_tm.tm_mday, fecha_tm.tm_hour);
   printf("%02d:%02d ", fecha_tm.tm_min, fecha_tm.tm_sec);
   printf("%d\n", fecha_tm.tm_year + 1900);
   
   return EXIT_SUCCESS;
}

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Kasswed
Colaborador
***
Desconectado Desconectado

Mensajes: 5.295

Rolling Stones


Ver Perfil
Re: [C] Como usar time.h
« Respuesta #2 en: 6 Marzo 2006, 16:12 pm »

Lo primero es saber que en time.h hay una estructura que se llama tm.

Esta estrctura contiene lo siguiente:

Código:
struct tm{
       int tm_sec;      //Indica los segundos después de un minuto (o sea los segundos xD)
       int tm_min;      //Indica los minutos depués de una hora (los minutos vaya)
       int tm_hour;     //Indica el numero de horas despues de media noche  (lo que es la hora[0,23])
       int tm_mday;     //El dia del mes[1,31]
       int tm_mon;      //Meses que han pasado dede enero [0,11], por lo tanto Diciembre es el mes 11 y enero el mes 0
       int tm_year;     //Años desde 1900, si quieres saber el año actual sumas 1900
       int tm_wday;     //Dia de la semana, desde el domingo [0,6]
       int tm_yday;     //Dias desde el 1 de Enero [0,365]
       int tm_isdst;    //No se xDD, algo de daylight
       }

Con esa estrcuctua podemos ya obtener todos los dats que queramos. Pero para eso tenemos que gestionar un poco las fechas con algunas funciones, si quremos mostrar la hora del sistema y la fecha del sistem vamos a usar localtime y time. Para ello hay que declarar una variable de timpo time_t que contendrá los datos de la fecha u hora. Y también hay que declarar una estrcutura de tipo tm (la de antes) para obtener de ahí las variables y tal xD. También la estrcutura es un puntero, así que cuando vayamosa investigar dentro lo haremos así: ->. Con un ejemplo se entiende todo mucho mejor :S

Código:
#include <stdio.h>
#include <time.h>

int main(){
    time_t ahora;
    struct tm *hora;
    time(&ahora);
    hora = localtime(&ahora);
    printf("%d:%d:%d", hora->tm_hour, hora->tm_min, hora->tm_sec);
    getchar();
    getchar();
    }

Y para la fecha, pues investigamos los datos de la fecha de la estrcutura de antes:

Código:
#include <stdio.h>
#include <time.h>

int main(){
    time_t ahora;
    struct tm *fecha;
    time(&ahora);
    fecha = localtime(&ahora);
    printf("%d-%d-%d", fecha->tm_mday, fecha->tm_mon+1, fecha->tm_year+1900);
    getchar();
    getchar();
    }

Esto es lo más básico xD, y a lo mejor algunas te las he explicado mal, pero lo que es la práctica se entiende ¿no?  :P

A groso modo...

Saludos!
En línea

"He who allows himself to be insulted, deserves to be."

Repórtame cualquier falta a las normas del foro por mensaje privado.
Siuto
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.587


Que puedo decir??


Ver Perfil WWW
Re: [C] Como usar time.h
« Respuesta #3 en: 6 Marzo 2006, 16:31 pm »

Bueno gracias pude hacer lo que queria pero hay un par de cosas que no las entiendo:

Código:
struct tm *hora;
Porque, se declara esto? Y porque como un puntero?

Código:
printf("%d:%d:%d", hora->tm_hour, hora->tm_min, hora->tm_sec);
Que es esto: "->", que hace eso?
En línea

metallikapo

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Re: [C] Como usar time.h
« Respuesta #4 en: 10 Julio 2013, 06:17 am »

Bueno gracias pude hacer lo que queria pero hay un par de cosas que no las entiendo:

Código:
struct tm *hora;
Porque, se declara esto? Y porque como un puntero?

Código:
printf("%d:%d:%d", hora->tm_hour, hora->tm_min, hora->tm_sec);
Que es esto: "->", que hace eso?

Hola:
Que sea un puntero a la estructura tm hace que pases por referencia las llamadas a función, lo que ocupa menos stack, Al margen de eso, en varios prototipos de las funciones de time.h se utilizan punteros del tipo struct tm *.

Código:
printf("%d:%d:%d", hora->tm_hour, hora->tm_min, hora->tm_sec);
Esto lo que hace es lo siguiente: El %d del printf indica que el argumento que espera recibir es un número entero. Y hora es una variable del tipo struct tm *. Justamente es un puntero a estructura, para llamar a algo que está dentro de la estructura a la que apunta, se utiliza ese formato: hora->tm_hour. Esto da como un resultado un número entero entre 0 y 23, hora->tm_min daría un entero entre 0 y 59, y lo mismo pasaría con hora->tm_sec.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
“Time” elige a Zuckerberg como personaje del año, pero los lectores prefieren...
Noticias
wolfbcn 4 1,907 Último mensaje 16 Diciembre 2010, 16:18 pm
por Draklit
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines