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