Я хотел бы получить текущую временную метку и распечатать ее с помощью fprintf
.
Как получить временную метку unix в C как int?
Ответ 1
Для 32-разрядных систем:
fprintf(stdout, "%u\n", (unsigned)time(NULL));
Для 64-битных систем:
fprintf(stdout, "%lu\n", (unsigned long)time(NULL));
Ответ 2
Я просто вернул значение, возвращаемое time()
#include <stdio.h>
#include <time.h>
int main(void) {
printf("Timestamp: %d\n",(int)time(NULL));
return 0;
}
что вы хотите?
$ gcc -Wall -Wextra -pedantic -std=c99 tstamp.c && ./a.out
Timestamp: 1343846167
Чтобы получить микросекунды с эпохи, начиная с C11, переносным способом является использование
int timespec_get(struct timespec *ts, int base)
К сожалению, C11 пока недоступен, поэтому на данный момент ближайший к портативу использует одну из функций POSIX clock_gettime
или gettimeofday
(помечен как устаревший в POSIX.1-2008, который рекомендует clock_gettime
).
Код для обеих функций почти идентичен:
#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;
}
Ответ 3
С второй точностью вы можете напечатать поле tv_sec
структуры timeval
, которое вы получаете из gettimeofday()
. Например:
#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;
}
Пример компиляции и работы:
$ gcc -Wall -o test ./test.c
$ ./test
Seconds since Jan. 1, 1970: 1343845834
Обратите внимание, однако, что это было некоторое время с эпохи, и поэтому long int
используется в течение нескольких секунд в эти дни.
Существуют также функции для печати человеко-читаемых времен. Подробнее см. эту страницу руководства. Ниже приведен пример использования ctime()
:
#include <time.h>
#include <stdio.h>
int main()
{
time_t clk = time(NULL);
printf("%s", ctime(&clk));
return 0;
}
Пример выполнения и вывода:
$ gcc -Wall -o test ./test.c
$ ./test
Wed Aug 1 14:43:23 2012
$
Ответ 4
#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);
}
И получится аналогичный результат:
Секунд с 1 января 1970 = 1476107865
Ответ 5
Если вы запрашиваете исходный код C для вычисления метки времени Unix, вы можете найти его по ссылке: https://github.com/Ullagaddi/C/blob/master/Algorithms/src/UnixTimeStamp.c