현재 날짜/시간을 1초 미만의 정밀도로 인쇄합니다.

현재 날짜/시간을 1초 미만의 정밀도로 인쇄합니다.

GNU는 나노초 출력에 대한 형식 사양을 date(1)이해 하므로 다음과 같습니다.%N

$ date +%H:%M:%S.%N

출력 19:10:03.725196000

BSD 날짜는 %N을 인식하지 못합니다. OS X에서 현재 시간을 1초 미만의 정밀도로 인쇄하는 방법은 무엇입니까?

답변1

충분히 현대적인 Perl 인터프리터(5.7.2부터 번들로 제공됨)가 있는 경우 Time::HiRes다음과 같은 변형을 사용할 수 있습니다.

#!/usr/bin/env perl
use strict;
use warnings;

use Time::HiRes qw(gettimeofday);
use POSIX       qw(strftime);

my ($s,$us) = gettimeofday();
printf "%s.%06d\n", strftime("%H:%M:%S", localtime($s)), $us;

예제 출력:

$ ./t.pl 
19:52:35.408520

Perl이 없거나 사용하고 싶지 않지만 C 컴파일러가 있는 경우 다음을 사용할 수 있습니다.

#include <time.h>
#include <stdio.h>
#include <sys/time.h>

int main(void)
{
    struct timeval now;
    struct tm *tmp;
    char timestr[9];
    int rc;

    rc = gettimeofday(&now, 0);
    if (rc != 0) {
        perror("gettimeofday");
        return 1;
    }

    tmp = localtime(&now.tv_sec);
    if (tmp == 0) {
        perror("localtime");
        return 1;
    }

    rc = strftime(timestr, sizeof(timestr), "%H:%M:%S", tmp);
    if (rc == 0) {
        fprintf(stderr, "strftime call failed.\n");
        return 1;
    }
    printf("%s.%06ld\n", timestr, now.tv_usec);
    return 0;
}

관련 정보