21

clock_t、time_t、struct tmの違いは何ですか?

struct tmは次のようになります:

struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
};

しかし、clock_ttime_tはどのように見えますか?

4

3 に答える 3

32

time_tは絶対時間であり、UNIXエポック(1970年1月1日午前0時GMT)からの整数秒数として表されます。これは、ある時点を明確に表現し、作業しやすいものとして役立ちます。

clock_tは時間の相対的な測定値であり、ある時点からの整数のクロックティックで表されます(コンピュータの起動の可能性がありますが、頻繁にロールオーバーする可能性があるため、保証はありません)。CLOCKS_PER_SEC1秒あたりのクロックティックがあります。この定数の値はオペレーティングシステムによって異なりますが、通常は約100です。タイミングの目的で使用されることもありますが、解像度が比較的低いため、あまり得意ではありません。gettimeofdaystruct timevalタイミングの目的にははるかに優れています。

struct tmはカレンダーの日付と時刻です。実際の時点を表していない可能性があります(たとえば、struct tm2月31日または12月0日であると言うことができます)。タイムゾーンが含まれていないため、絶対的なものではありません。これは通常、人間が読み取れる日付と時刻の表現との間で変換するときに使用されます。

于 2012-09-02T22:01:58.853 に答える
8

time_t現在の時刻を表します。通常は、あるエポック(たとえば、1970年1月1日の深夜)からの秒数です。カレンダー/実時間を表すことを目的としていますが、それでも単一の単純な算術タイプとして簡単に操作できます(たとえば、difftime指定された2つの時間の差を見つけることができます)。

clock_tプロセスが開始されてから使用されたCPU時間を表します。CLOCKS_PER_SECで割ることにより、秒に変換できます。その本当の目的は、カレンダー/実時間ではなく、使用されているCPU時間を表すことです。

struct tmは、年、月、日、時、分、秒などのコンポーネントに分割されたカレンダー/実時間を表す構造(指定されたメンバーを含む)です。これは(主に)外部インターフェイスとして意図されていますがtime_t、主に内部使用-つまり、一般的な使用法は、外部から日付/時刻を取得するときに、コンポーネントをに入れて、内部ストレージ用struct tmに変換することです。time_t次に、時刻/日付を表示するなどの操作が必要な場合は、をに変換しtime_tますstruct tm。その操作を行うルーチンには、日付の正規化などを行うためのかなりの量のインテリジェンスが含まれているため、のような日付は(またはうるう年に)30 February変換されます。2 March1 March

于 2012-09-02T22:04:55.423 に答える
4

Cはそれを言います:

(C99、7.23.1p3)「時間を表すことができる算術型であるclock_tとtime_t」

glibc、タイプtime_tはのエイリアスlongです。

GNU Cライブラリでは、time_tはlongintと同等です。

http://www.gnu.org/software/libc/manual/html_node/Simple-Calendar-Time.htmlから

于 2012-09-02T22:00:44.447 に答える