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

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funciones para obtener fecha y hora local
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funciones para obtener fecha y hora local  (Leído 2,109 veces)
terrateck

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Funciones para obtener fecha y hora local
« en: 25 Diciembre 2013, 21:36 pm »

Hola a todos,

Estoy teniendo problemas con las funciones time y localtime para obtener la hora local. En el siguiente ejemplo que muestro intento obtener dos fechas diferentes con un delay de 5 seg entre ellas, usando variables independientes.
Antes de obtener la segunda fecha imprimo también en pantalla la primera para la comprobación.

Código
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <windows.h>
  4.  
  5. #define TFECHA 30
  6.  
  7. int main ()
  8.  {
  9.  time_t t1,t2;
  10.  struct tm *tinfo1, *tinfo2;
  11.  char f1[TFECHA],f2[TFECHA];
  12.  
  13.  time(&t1);
  14.  tinfo1=localtime(&t1);
  15.  strftime(f1, TFECHA, "%d/%m/%Y %H:%M:%S", tinfo1);
  16.  printf("%s\n", f1);
  17.  
  18.  Sleep(5000);
  19.  
  20.  time(&t2);
  21.  tinfo2=localtime(&t2);
  22.  
  23.  strftime(f1, TFECHA, "%d/%m/%Y %H:%M:%S", tinfo1);
  24.  strftime(f2, TFECHA, "%d/%m/%Y %H:%M:%S", tinfo2);
  25.  printf("%s\n%s", f1,f2);
  26.  
  27.  return 0;
  28.  }
  29.  


Sin embargo al imprimir al final las dos últimas fechas, los valores que se obtienen son exactamente iguales. No entiendo por qué al ejecutar tinfo2=localtime(&t2) la estructura t1 también se ve alterada...

Salida generada:
Código:
25/12/2013 15:38:34
25/12/2013 15:38:39
25/12/2013 15:38:39

Si alguien pudiera aclarármelo se lo agradecería.

Saludos.


« Última modificación: 25 Diciembre 2013, 22:44 pm por terrateck » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Funciones para obtener fecha y hora local
« Respuesta #1 en: 26 Diciembre 2013, 02:23 am »

Sin embargo al imprimir al final las dos últimas fechas, los valores que se obtienen son exactamente iguales. No entiendo por qué al ejecutar tinfo2=localtime(&t2) la estructura t1 también se ve alterada
Es un error lógico. El problema no son las variables t1 y t2 sino tinfo1 y tinfo2.

La documentación de la función "localtime" es:
Citar
localtime

struct tm *localtime(const time_t *tod);

The function stores in the static-duration time structure an encoding of the calendar time in *tod, expressed as local time. It returns the address of that structure.
Ella retorna la dirección de un objeto interno con clase de almacenamiento estático, esto es, se crea justo antes de llamarse a la función main y se destruye al finalizar el programa, por eso la dirección que retorna en cada llamada es la misma. Puedes comprobarlo imprimiendo la dirección de esos dos punteros justo antes de terminar tu programa.

Para que tenga el comportamiento que indicas debes evitar el uso de punteros, de esta forma:
Código
  1. #include <stdio.h>
  2. #include <time.h>
  3.  
  4. #include <windows.h>
  5.  
  6. #define TFECHA 30
  7.  
  8. int main(void)
  9. {
  10.   time_t t1, t2;
  11.   struct tm tinfo1, tinfo2;
  12.   char f1[TFECHA],f2[TFECHA];
  13.  
  14.   time(&t1);
  15.   tinfo1 = *localtime(&t1);
  16.   strftime(f1, TFECHA, "%d/%m/%Y %H:%M:%S", &tinfo1);
  17.   printf("%s\n", f1);
  18.  
  19.   Sleep(5000);
  20.  
  21.   time(&t2);
  22.   tinfo2 = *localtime(&t2);
  23.   strftime(f1, TFECHA, "%d/%m/%Y %H:%M:%S", &tinfo1);
  24.   strftime(f2, TFECHA, "%d/%m/%Y %H:%M:%S", &tinfo2);
  25.   printf("%s\n%s\n", f1,f2);
  26.  
  27.   return 0;
  28. }

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
terrateck

Desconectado Desconectado

Mensajes: 11


Ver Perfil
Re: Funciones para obtener fecha y hora local
« Respuesta #2 en: 26 Diciembre 2013, 09:37 am »

Gracias rir3760 por la aclaración conceptual y por la corrección. Me ha servido para solucionar el problema.

Parece que el usuario dayu34 está haciendo spam.

Saludos
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines