52

のデータ型がわかりませんtime_t。フロートダブルか何か他のものですか?それを表示したいのなら、それに対応するタグが必要だからですprintf。残りはそこから表示することができますが、それtime_tに対応するデータ型を知る必要があります。

4

4 に答える 4

37

プラットフォーム固有です。ただし、既知のタイプにキャストすることはできます。

printf("%lld\n", (long long) time(NULL));
于 2010-05-08T01:43:17.050 に答える
30

残念ながら、完全に移植できるわけではありません。通常は一体型ですが、「整数型または実数型」の場合もあります。

于 2010-05-08T01:17:50.833 に答える
18

関数を使用できますdifftime。2つの指定された値の差を返し、time_t出力値はですdoubledifftimeのドキュメントを参照)。

time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0); 
printf("%g",actual_time_sec);
于 2014-03-04T15:17:31.227 に答える
2

いつでもmktimeのようなものを使用して既知の時刻(深夜、昨夜)を作成し、difftimeを使用して2つの間の倍精度の時間差を取得できます。プラットフォームに依存しないソリューションの場合、ライブラリの詳細を掘り下げない限り、それ以上のことはできません。C仕様によれば、time_tの定義は実装定義です(つまり、ライブラリの各実装は、使用するライブラリ関数が仕様に従って動作する限り、好きなように定義できます)。

そうは言っても、私のLinuxマシンのtime_tのサイズは8バイトです。これは、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を表示することに夢中になっている場合は、独自の実験を試して、プラットフォームとコンパイラでどのように機能するかを確認することをお勧めします。

于 2010-05-08T01:39:04.010 に答える