マイクロ秒/ナノ秒単位の時刻の取得
1. [UNIX/Windows] マイクロ秒の表示 – gettimeofday() – <sys/time.h>
・print_time1.c
#include <stdio.h>
#include <sys/time.h>
int main() {
struct timeval now;
struct tm *t;
gettimeofday(&now, NULL);
t = localtime(&now.tv_sec);
printf("%04d/%02d/%02d %02d:%02d:%02d.%06ld\n",
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
now.tv_usec);
return 0;
}
$ ./print_time1
2011/07/18 02:50:40.333827
gettimeofday() は廃止予定らしい。
http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/gettimeofday.2.html
>> POSIX.1-2008 では gettimeofday() は廃止予定とされており、代わりに clock_gettime(2) の使用が推奨されている。
2. [UNIX] ナノ秒の表示 – clock_gettime() – <time.h>
・print_time2.c
#include <stdio.h>
#include <time.h>
int main() {
struct timespec now;
struct tm *t;
clock_gettime(CLOCK_REALTIME, &now);
t = localtime(&now.tv_sec);
printf("%04d/%02d/%02d %02d:%02d:%02d.%09ld\n",
t->tm_year + 1900, t->tm_mon + 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
now.tv_nsec);
return 0;
}
$ ./print_time2
2011/07/18 02:50:43.268259848
コンパイルに失敗した場合は、「-lrt」オプションを付け、librt とリンクさせる。
3. [Windows] ミリ秒の表示 – GetLocalTime() – <windows.h>
・print_time3.c
#include <stdio.h>
#include <windows.h>
int main() {
SYSTEMTIME now;
GetLocalTime(&now);
printf("%04d/%02d/%02d %02d:%02d:%02d.%03d\n",
now.wYear, now.wMonth, now.wDay,
now.wHour, now.wMinute, now.wSecond,
now.wMilliseconds);
return 0;
}
>.\print_time3.exe
2011/07/18 03:31:53.722
参考:
http://www.bugbearr.jp/?C%E8%A8%80%E8%AA%9E%2F%E6%97%A5%E6%99%82
http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/clock_gettime.2.html