Как получить текущее время в Linux за миллисекунды?
Как получить текущее время в миллисекундах от C в Linux?
Ответ 1
Это может быть достигнуто с помощью функции clock_gettime
.
В текущей версии POSIX gettimeofday
помечен как устаревший. Это означает, что он может быть удален из будущей версии спецификации. Писателям приложений рекомендуется использовать функцию clock_gettime
вместо gettimeofday
.
Вот пример использования clock_gettime
:
#define _POSIX_C_SOURCE 200809L
#include <inttypes.h>
#include <math.h>
#include <stdio.h>
#include <time.h>
void print_current_time_with_ms (void)
{
long ms; // Milliseconds
time_t s; // Seconds
struct timespec spec;
clock_gettime(CLOCK_REALTIME, &spec);
s = spec.tv_sec;
ms = round(spec.tv_nsec / 1.0e6); // Convert nanoseconds to milliseconds
printf("Current time: %"PRIdMAX".%03ld seconds since the Epoch\n",
(intmax_t)s, ms);
}
Если ваша цель - измерять прошедшее время, а ваша система поддерживает параметр "монотонные часы", вам следует использовать CLOCK_MONOTONIC
вместо CLOCK_REALTIME
.
Ответ 2
Вам нужно сделать что-то вроде этого:
struct timeval tv;
gettimeofday(&tv, NULL);
double time_in_mill =
(tv.tv_sec) * 1000 + (tv.tv_usec) / 1000 ; // convert tv_sec & tv_usec to millisecond
Ответ 3
Ниже приведена функция util для получения текущей метки времени в миллисекундах:
#include <sys/time.h>
long long current_timestamp() {
struct timeval te;
gettimeofday(&te, NULL); // get current time
long long milliseconds = te.tv_sec*1000LL + te.tv_usec/1000; // calculate milliseconds
// printf("milliseconds: %lld\n", milliseconds);
return milliseconds;
}
О часовом поясе:
поддержка gettimeofday() для указания часового пояса, Я использую NULL, которые игнорируют часовой пояс, но при необходимости вы можете указать часовой пояс.
@Update - часовой пояс
Поскольку представление времени long
не относится к самому часовому поясу или не выполняется, поэтому установка tz
param для gettimeofday() не требуется, поскольку это не будет иметь никакого значения.
И, согласно man-странице gettimeofday()
, использование структуры timezone
устарело, поэтому аргумент tz
обычно должен быть указан как NULL, для получения дополнительной информации см. справочную страницу.
Ответ 4
Используйте gettimeofday()
, чтобы получить время в секундах и микросекундах. Комбинация и округление до миллисекунд остается в виде упражнения.
Ответ 5
C11 timespec_get
Он возвращается к наносекундам, округленный до разрешения реализации.
Он уже реализован в Ubuntu 15.10. API выглядит так же, как POSIX clock_gettime
.
#include <time.h>
struct timespec ts;
timespec_get(&ts, TIME_UTC);
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
Подробнее здесь: fooobar.com/questions/9684/...
Ответ 6
Если вы хотите что-то ввести в свою командную строку, то date +%H:%M:%S.%N
даст вам время с наносекундами.