time_t
のデータ型がわかりません。それはフロートダブルか何かですか?表示したい場合は、printf
に対応するタグが必要だからです。 time_t
を表示するためにそこから残りを処理できますが、それに対応するデータ型を知る必要があります。
残念ながら、完全な移植性はありません。通常は整数ですが、 可能 任意の「整数型または実浮動型」です。
プラットフォーム固有です。ただし、既知の型にキャストできます。
printf("%lld\n", (long long) time(NULL));
関数difftime
を使用できます。指定された2つのtime_t
値の差を返し、出力値はdouble
です( difftime documentation を参照)。
time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0);
printf("%g",actual_time_sec);
Mktimeのようなものを使用して既知の時間(深夜、昨夜)を作成し、difftimeを使用して2つの間の倍精度の時間差を取得できます。プラットフォームに依存しないソリューションの場合、ライブラリの詳細を掘り下げない限り、それ以上のことをするつもりはありません。 C仕様によると、time_tの定義は実装定義です(つまり、ライブラリの各実装は、使用するライブラリ関数が仕様に従って動作する限り、好きなように定義できます)。
そうは言っても、私のLinuxマシンのtime_tのサイズは8バイトで、これはlong intまたはdoubleを示唆しています。だから私はやった:
int main()
{
for(;;)
{
printf ("%ld\n", time(NULL));
printf ("%f\n", time(NULL));
sleep(1);
}
return 0;
}
%ldで指定された時間は各ステップで1つずつ増加し、フロートは毎回0.000を印刷しました。 printfを使用してtime_tsを表示するのに苦労している場合、最善の方法は、独自のこのような実験を試して、プラットフォームおよびコンパイラでどのように動作するかを確認することです。