質問

私は、秒の小数部を含むシステム時刻を取得したいです。それは、標準の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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top