ventajas tiempo resumen linea lenguaje historia dev caracteristicas aplicaciones c unix timestamp epoch

resumen - ¿Cómo obtengo la marca de tiempo de Unix en C como int?



unix caracteristicas (4)

Me gustaría obtener la marca de tiempo actual e imprimirla usando fprintf .


Con la segunda precisión, puede imprimir el campo timeval estructura timeval que obtiene de la función gettimeofday() . Por ejemplo:

#include <sys/time.h> #include <stdio.h> int main() { struct timeval tv; gettimeofday(&tv, NULL); printf("Seconds since Jan. 1, 1970: %ld/n", tv.tv_sec); return 0; }

Ejemplo de compilación y ejecución:

$ gcc -Wall -o test ./test.c $ ./test Seconds since Jan. 1, 1970: 1343845834

Tenga en cuenta, sin embargo, que ha pasado un tiempo desde epoch y por lo long int se utiliza para adaptarse a un número de segundos en estos días.

También hay funciones para imprimir tiempos legibles por humanos. Vea esta página del manual para más detalles. Aquí va un ejemplo usando ctime() :

#include <time.h> #include <stdio.h> int main() { time_t clk = time(NULL); printf("%s", ctime(&clk)); return 0; }

Ejemplo de ejecución y salida:

$ gcc -Wall -o test ./test.c $ ./test Wed Aug 1 14:43:23 2012 $


Para sistemas de 32 bits:

fprintf(stdout, "%u/n", (unsigned)time(NULL));

Para sistemas de 64 bits:

fprintf(stdout, "%lu/n", (unsigned long)time(NULL));


Solo está emitiendo el valor devuelto por el time()

#include <stdio.h> #include <time.h> int main(void) { printf("Timestamp: %d/n",(int)time(NULL)); return 0; }

¿Lo que quieras?

$ gcc -Wall -Wextra -pedantic -std=c99 tstamp.c && ./a.out Timestamp: 1343846167

Para obtener microsegundos desde la época, desde C11 en adelante, la forma portátil es usar

int timespec_get(struct timespec *ts, int base)

Desafortunadamente, C11 aún no está disponible en todas partes, por lo que lo más cercano a lo portátil es usar una de las funciones POSIX clock_gettime o clock_gettime (marcado como obsoleto en POSIX.1-2008, que recomienda clock_gettime ).

El código para ambas funciones es casi idéntico:

#include <stdio.h> #include <time.h> #include <stdint.h> #include <inttypes.h> int main(void) { struct timespec tms; /* The C11 way */ /* if (! timespec_get(&tms, TIME_UTC)) { */ /* POSIX.1-2008 way */ if (clock_gettime(CLOCK_REALTIME,&tms)) { return -1; } /* seconds, multiplied with 1 million */ int64_t micros = tms.tv_sec * 1000000; /* Add full microseconds */ micros += tms.tv_nsec/1000; /* round up if necessary */ if (tms.tv_nsec % 1000 >= 500) { ++micros; } printf("Microseconds: %"PRId64"/n",micros); return 0; }


#include <stdio.h> #include <time.h> int main () { time_t seconds; seconds = time(NULL); printf("Seconds since January 1, 1970 = %ld/n", seconds); return(0); }

Y obtendrá un resultado similar:
Segundos desde el 1 de enero de 1970 = 1476107865