web-dev-qa-db-ja.com

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

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はどのように見えますか?

17
Cristi

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

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

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

30

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

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

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

6
Jerry Coffin

Cはただそれを言います:

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

glibcで、タイプtime_tlongのエイリアスです。

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

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

3
ouah