2009-03-31 21 views
5

Total pregunta de novato aquí; Me disculpo de antemano.Obteniendo la hora actual en C usando time.h

Supongamos que tengo un daemon escrito en C que se despierta cada cinco minutos más o menos, realiza algún procesamiento si hay algo en su cola de entrada, y luego vuelve a dormirse. Ahora supongamos que hay algún procesamiento que solo tiene que hacer después de un cierto tiempo (configurable), por ejemplo, 2 pm (y antes de la medianoche).

En C, ¿cuál es la forma más rápida y mejor de convertir la hora actual en una variable int para que pueda verificarse fácilmente, para determinar si, de hecho, es después de las 2 pm de hoy?

+0

Supongo que tiene buenas razones para querer implementar esta funcionalidad por su cuenta, pero por si acaso, pensé que señalaría que esto es básicamente lo que hace cron. ¿Podría su aplicación simplemente ser invocada por cron? (o tareas programadas en Windows) – rmeador

+0

El daemon tiene un procesamiento que necesita hacer cada vez que se despierta, solo tiene algún procesamiento especial que solo se realiza después de las 2 p.m. De lo contrario, sí, definitivamente estoy de acuerdo en que cron es la mejor solución. –

Respuesta

17

localtime. Ver http://linux.die.net/man/3/localtime

struct tm *tm_struct = localtime(time(NULL)); 

int hour = tm_struct->tm_hour; 
+3

time_t rawtime; time (& rawtime); struct tm * tm_struct = localtime (& rawtime); estaba trabajando para mí – Belovoj

7
printf("the hour is %d\n", localtime(time(NULL))->tm_hour); 

Esto se basa en el hecho de que localtime() devuelve un puntero al almacenamiento estático.

7

La llamada localtime(time(NULL)) nunca funcionará. El valor de retorno de time() es time_t, y el primer argumento de localtime es time_t*. Tampoco es la respuesta aceptada, ni es el que tiene printf correcto.

time_t now; 
struct tm *now_tm; 
int hour; 

now = time(NULL); 
now_tm = localtime(&now); 
hour = now_tm->tm_hour; 
+0

Me parece recordar que la razón por la que acepté la primera respuesta fue porque me funcionaba. ¿Podría terminar siendo dependiente de la plataforma? Han pasado 5 años y una compañía diferente desde que miré el código, así que realmente no recuerdo. –

Cuestiones relacionadas