C++/標準ライブラリ/ctime
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型で与えられるものとする。