2009-07-02 28 views

Respuesta

5

Utiliza gettimeofday (2) que se define en POSIX.1 y BSD.

Devuelve segundos y microsegundos como se define en struct timeval desde sys/time.h.

0

Encontrará C ejemplos de código para obtener tiempo y convertirlo a varios formatos here.

7

Esta es una forma sencilla:

time_t seconds_since_midnight = time(NULL) % 86400; 

Para obtener milisegundos aproximados desde la media noche, se multiplican por 1000. seconds_since_midnight

Si necesita más resolución (si tenemos en cuenta que realmente lo hace), que tendrá que use otra función como gettimeofday().

0

Tome un vistazo a gmtime() Convierte directamente al Tiempo Universal Coordinado (UTC) ...

8

Ésta es la forma precisa:

struct timeval tv; 
int msec = -1; 
if (gettimeofday(&tv, NULL) == 0) 
{ 
    msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec/1000); 
} 

que almacenará en msec el número de milisegundos desde medianoche. (o -1 si hubo un error al obtener el tiempo.)

Aunque por lo general es una mala idea para almacenar los valores de tiempo en un int, estoy siendo un poco arrogante y asumiendo int es de al menos 32 bits y puede acomodar fácilmente el rango (-1) a 86,400,000.

Pero no sé si vale la pena todo el esfuerzo.

+1

Parece que hay algo mal con su código, de acuerdo con la C que conozco. Tal vez debiste haber declarado 'msec' de antemano, también usaste' else'. – ThoAppelsin

+0

@ThoAppelsin Buen punto. Corregido ¡Gracias! – scraimer

Cuestiones relacionadas