TIME.Hを使用してUTC時刻の秒の小数部を取得する方法
質問
私は、秒の小数部を含むシステム時刻を取得したいです。それは、標準のC(ANSI C)で可能ですか? その後、私の窓のOSのためのいくつかのライブラリを教えていない場合ので、私はそれを可能にすること。 Linuxでは、私は私のために仕事の罰金と、次のコードを持っています。
#include <sys/time.h>
#include <time.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
char buffer[30];
struct timeval tv;
time_t curtime;
gettimeofday(&tv, NULL);
curtime=tv.tv_sec;
strftime(buffer,30,"%m-%d-%Y %T.",localtime(&curtime));
printf("%s%ld\n",buffer,tv.tv_usec);
return 0;
}
出力は
2009年12月25日11:09:18.35443541
親切に助け私は、どのようにウィンドウのOSのための可能なことです。 ANSI Cは私を許可しない場合ます。
解決
標準Cサブ第2の解像度タイミングを提供しない。
POSIXサブ第2の解像度のタイミングを提供しません - 。実際には、あなたが表示さgettimeofday()
含めて、それを行うためのさまざまな方法の数を
他のヒント
このように:
#include <wtypes.h>
int main()
{
SYSTEMTIME t;
GetSystemTime(&t);
int year = t.wYear;
int month = t.wMonth;
int day = t.wDay;
int hour = t.wHour;
int minute = t.wMinute;
int second = t.wSecond;
int second_fraction = t.wMilliseconds;
return 0;
}
パフォーマンスについてのポイントのカップル、それはあなたにとって重要であるとします。
1)gettimeofday()
は非常に高速であり、いくつかのスレッドで使用されている場合、それはパフォーマンスのworsenig発生しない。
2)の内側には、それは昼間のようないくつかのシステム設定を必要とするためlocaltime()
()の呼び出しはおそらくありpthread_mutex_lock()
。だから、あなたはマルチスレッドアプリケーションで広くそれを使用する場合があるかもしれないパフォーマンスの問題
上記のコードで
printf("%s%ld\n",buffer,tv.tv_usec);
ほとんどの時間を動作しますが、それは小さなtv.tv_usec値については正しくありません。
tv.tv_usecが123であれば、それは印刷する必要があるとき、それはHH:MM:SS.123
を表示しますHH:MM:SS.000123
これを試してみてください
printf("%s%.6ld\n", buffer, tv.tv_usec);
所属していません StackOverflow