Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/06/2011, 14:21
sam90
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 8 meses
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