Linux의 C에서 현재 시간을 밀리 초 단위로 얻는 방법은 무엇입니까?
Linux에서 현재 시간을 밀리 초 단위로 가져 오려면 어떻게해야합니까?
이것은 POSIXclock_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
if (ms > 999) {
s++;
ms = 0;
}
printf("Current time: %"PRIdMAX".%03ld seconds since the Epoch\n",
(intmax_t)s, ms);
}
목표가 경과 시간을 측정하는 것이고 시스템이 "단조 시계"옵션을 지원하는 경우 CLOCK_MONOTONIC
대신을 사용하는 것이 좋습니다 CLOCK_REALTIME
.
다음과 같이해야합니다.
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
다음은 밀리 초 단위로 현재 타임 스탬프를 가져 오는 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() support to specify timezone, I use NULL, which ignore the timezone, but you can specify a timezone, if need.
@Update - timezone
Since the long
representation of time is not relevant to or effected by timezone itself, so setting tz
param of gettimeofday() is not necessary, since it won't make any difference.
And, according to man page of gettimeofday()
, the use of the timezone
structure is obsolete, thus the tz
argument should normally be specified as NULL, for details please check the man page.
Use gettimeofday()
to get the time in seconds and microseconds. Combining and rounding to milliseconds is left as an exercise.
C11 timespec_get
It returns up to nanoseconds, rounded to the resolution of the implementation.
It is already implemented in Ubuntu 15.10. API looks the same as the 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 */
};
More details here: https://stackoverflow.com/a/36095407/895245
'Programing' 카테고리의 다른 글
PHP에서 팩토리 디자인 패턴이란 무엇입니까? (0) | 2020.09.20 |
---|---|
최근 실행 된`git pull`의 날짜와 시간을 어떻게 확인하나요? (0) | 2020.09.20 |
해시 배열을 단일 해시로 매핑하는 Rails (0) | 2020.09.20 |
Rails의 form_for를 사용하되 사용자 정의 클래스, 속성을 (0) | 2020.09.20 |
ng-click으로 확인란을 클릭해도 모델이 업데이트되지 않습니다. (0) | 2020.09.20 |