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;
}