C++教科書/標準ライブラリ編/<ctime>の章 =
編集はじめに
編集C++の標準ライブラリ <ctime>
ヘッダーは、時間と日付に関する機能を提供します。このヘッダーは元々C言語の時間ライブラリ <time.h>
として存在していましたが、C++にも取り込まれています。時間の取得、時間の書式変換、時間の加算/減算などの機能が用意されています。
マクロ定数
編集CLOCKS_PER_SEC
編集このマクロ定数は、1秒間のプロセッサクロック数を表します。clock関数の返す値を秒数に変換する際に使用します。
NULL
編集ヌルポインタを表す実装定義された定数です。
型
編集clock_t
編集clock関数の返す値の型です。プログラムの実行開始からの経過時間をプロセッサクロック数で表します。
size_t
編集sizeof演算子が返す符号なし整数型です。主に配列の要素数を表すのに使われます。
time_t
編集1970年1月1日0時0分0秒からの経過秒数を表す型です。time、mktime関数でこの型が使われます。
tm
編集時間や日付の要素(年、月、日、時、分、秒など)を分割して保持する構造体の型です。
timespec (C++17)
編集時間を秒とナノ秒の構造体で表す型です。精度の高い時間値を扱う場合に使用します。
時間操作関数
編集clock
編集プログラムの実行開始からの経過時間をプロセッサクロック数で返します。
time
編集1970年1月1日0時0分0秒からの経過秒数(time_t型)を取得します。
difftime 2つのtime_t型の値の差(秒数)を計算します。
timespec_get (C++17)
編集指定のタイムベースから、時間をtimespec構造体で取得します。
書式変換関数
編集ctime
編集time_t型の時間値を"Sat Jan 01 00:00:00 2000\n"のような文字列に変換します。
asctime
編集tm構造体の時間値を"Sat Jan 01 00:00:00 2000"のような文字列に変換します。
strftime
編集tm構造体の値をユーザー指定の書式で文字列に変換します。
gmtime
編集time_t型の値を協定世界時(UTC)のtm構造体に変換します。
localtime
編集time_t型の値をローカル時間のtm構造体に変換します。
mktime
編集tm構造体の値をtime_t型に変換します。
tm構造体
編集tm構造体は時間や日付の要素を保持するための構造体です。
- tm_sec - 秒 (0-60)
- tm_min - 分 (0-59)
- tm_hour - 時 (0-23)
- tm_mday - 日 (1-31)
- tm_mon - 月 (0-11)
- tm_year - 年 (1900年からの経過年数)
- tm_wday - 曜日 (0-6、日曜開始)
- tm_yday - 年内の日 (0-365)
- tm_isdst - 夏時間フラグ
timespec構造体 (C++17)
編集timespec構造体は、高精度の時間値を扱うための構造体です。
- tv_sec - 1970年1月1日00:00:00 UTCからの経過秒数
- tv_nsec - ナノ秒 (0-999,999,999)
まとめ
編集<ctime>
ヘッダーは、時間の取得、書式変換、演算などの機能を提供します。時間をプログラム上で扱う際に欠かせない重要なヘッダーです。時間の表現形式として、時間値(time_t)、分割時間(tm)、高精度時間(timespec)の3種類があり、用途に合わせて使い分けることができます。
演習問題
編集- clock関数を使って、ある処理の実行時間を計測するコードを書きなさい。
- 現在の日時を"yyyy/mm/dd hh:mm:ss"の形式で表示するコードを書きなさい。
- 与えられた2つの時間の差(秒数)を計算するコードを書きなさい。時間はtime_t型で与えられるものとする。