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_tとtime_tはどのように見えますか?
time_t
は絶対時間であり、UNIXエポック(1970年1月1日午前0時GMT)からの整数秒数として表されます。これは、ある時点を明確に表現し、作業しやすいものとして役立ちます。
clock_t
は時間の相対的な測定値であり、ある時点からの整数のクロックティックで表されます(コンピュータの起動の可能性がありますが、頻繁にロールオーバーする可能性があるため、保証はありません)。CLOCKS_PER_SEC
1秒あたりのクロックティックがあります。この定数の値はオペレーティングシステムによって異なりますが、通常は約100です。タイミングの目的で使用されることもありますが、解像度が比較的低いため、あまり得意ではありません。gettimeofday
のstruct timeval
タイミングの目的にははるかに優れています。
struct tm
はカレンダーの日付と時刻です。実際の時点を表していない可能性があります(たとえば、struct tm
2月31日または12月0日であると言うことができます)。タイムゾーンが含まれていないため、絶対的なものではありません。これは通常、人間が読み取れる日付と時刻の表現との間で変換するときに使用されます。
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 March
1 March
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から