7.18.2011

Get the current system time in microseconds/nanoseconds

マイクロ秒/ナノ秒単位の時刻の取得

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

0 件のコメント:

コメントを投稿