Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problema con time.h

Estas en el tema de Problema con time.h en el foro de C/C++ en Foros del Web. Estoy teniendo problema con la libreria time.h. La idea simplificada es la siguiente. Se deberia cargar el servidor con una fecha y hora establecida. Es ...
  #1 (permalink)  
Antiguo 27/06/2011, 14:21
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Problema con time.h

Estoy teniendo problema con la libreria time.h. La idea simplificada es la siguiente. Se deberia cargar el servidor con una fecha y hora establecida. Es servidor va a estar esperando a que llegue la hora.
Para parserar la hora utilizo esta funcion:

Código C:
Ver original
  1. void parse_time_date(char * fecha,char * hora,struct tm * tm)
  2. {
  3.     if (strptime(fecha,"%d/%m/%Y", tm) == 0) {fprintf(stderr,"server: Error parseando la fecha\n"); exit(-1);}
  4.     if (strptime(hora,"%H:%M:%S", tm) == 0)  {fprintf(stderr,"server: Error parseando la hora\n"); exit(-1);}
  5.     if (verbose_flag) printf("Fecha y hora de carrera: %s",asctime(tm));
  6.     return ;
  7. }

El ultimo printf me muestra la hora parsea y es la correcta.

Luego es este while obtengo la hora actual y resto con diff.

Código C:
Ver original
  1. while (1)
  2.     {
  3.         time(&now);
  4.         ptm = localtime ( &now );
  5.         dif = difftime(mktime(tiempo),now );
  6.         printf("DIFERENCIA: %f  \n",dif);
  7.         sleep(1);
  8.        
  9.     }

El problema esta que la diferencia me esta dando mal. Verificado por mi y por un amigo, en otro computadora, vimos que el error es de una hora. como si la funcion time da una hora de mas que al restar se nota.

Me gustaria saber si alguien sabe por que pasa eso. Para mi que viene de la mano de los usos horarios pero no logre arreglarlo. Cree un estructura tm con localtime despues la converti a con mktime para hacer difftime pero sigue pasando lo mismo.

si uso ctima para imprimir now si me muestra la hora correcta.

Mientras sigo buscando o se les ocurre porque pasa esto, recurri a restarle 3600 a now para que me de bien

Saludos
  #2 (permalink)  
Antiguo 27/06/2011, 14:56
Avatar de afrika026  
Fecha de Ingreso: junio-2011
Mensajes: 85
Antigüedad: 12 años, 10 meses
Puntos: 19
Respuesta: Problema con time.h

Probá con localtime:

dif = difftime(localtime(&tiempo),now );
  #3 (permalink)  
Antiguo 27/06/2011, 15:11
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con time.h

difftime espera dos time_t y localtime devuelve un struct tm. No son compatibles los tipos. Igualmente los porbe y no funciono.
  #4 (permalink)  
Antiguo 27/06/2011, 17:58
 
Fecha de Ingreso: febrero-2003
Ubicación: D.F.
Mensajes: 163
Antigüedad: 21 años, 2 meses
Puntos: 22
Respuesta: Problema con time.h

El miembro tm_isdst de la estructura tm sirve para controlar el DST (Daylight saving time), a veces suele dar diferencias entre diferentes implementaciones al momento de utilizar mktime, si estableces un valor negativo das la opción al sistema de controlar este valor dependiendo de la zona horaria. En otro caso un valor igual a 0 lo apaga y un valor > 0 lo enciende.

Código C++:
Ver original
  1. while (1)
  2.     {
  3.         time(&now);
  4.         ptm = localtime ( &now );
  5.         tiempo->tm_isdst = -1;
  6.         dif = difftime(mktime(tiempo),now );
  7.         printf("DIFERENCIA: %f  \n",dif);
  8.         sleep(1);
  9.        
  10.     }
  #5 (permalink)  
Antiguo 27/06/2011, 18:23
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Problema con time.h

Asi es...hace un rato probando setie a cero esa variable y funciono. Muchas gracias igualmente!!

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:24.