Programing

Linux의 C에서 현재 시간을 밀리 초 단위로 얻는 방법은 무엇입니까?

lottogame 2020. 9. 20. 10:32
반응형

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

참고URL : https://stackoverflow.com/questions/3756323/how-to-get-the-current-time-in-milliseconds-from-c-in-linux

반응형