日付と時刻ライブラリ
From cppreference.com
< cpp
C++ は2種類の時刻操作をサポートします
- chronoライブラリ、可変精度の時刻を扱うための柔軟な型の集まり(例:std::chrono::time_point)。
- Cスタイルの日付と時刻ライブラリ(例:std::time)。
目次 |
[編集] Chrono ライブラリ (C++11 以降)
chrono ライブラリは、いくつかの主要な型と、ユーティリティ関数および一般的な typedef を定義します
| (C++20以降) |
[編集] クロック
クロックは、開始点(またはエポック)とティックレートから構成されます。例えば、あるクロックは1970年1月1日をエポックとし、毎秒ティックを刻むかもしれません。C++はいくつかのクロック型を定義しています
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++11) |
システム全体のリアルタイムクロックからの実時間 (クラス) |
| (C++11) |
調整されることのない単調増加クロック (クラス) |
| (C++11) |
利用可能な最も短いティック周期を持つクロック (クラス) |
| (C++20) |
型がClockであるかを判定する (クラステンプレート) (変数テンプレート) |
| (C++20) |
協定世界時 (UTC) のためのClock (クラス) |
| (C++20) |
国際原子時 (TAI) のためのClock (クラス) |
| (C++20) |
GPS 時刻のためのClock (クラス) |
| (C++20) |
ファイル時刻に使用されるClock (typedef) |
| (C++20) |
ローカル時刻を表す疑似クロック (クラス) |
[編集] 時間点
時間点とは、特定のクロックのエポックから経過した時間間隔です。
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++11) |
ある時点 (クラステンプレート) |
| (C++20) |
あるクロックの時間点を別のクロックの時間点に変換する方法を定義する特性クラス (クラステンプレート) |
| (C++20) |
あるクロックの時間点を別のクロックの時間点に変換する (関数テンプレート) |
[編集] 時間間隔
時間間隔は、ある時間単位のティック数として定義される時間のスパンから構成されます。例えば、「42秒」は、1秒の時間単位の42ティックからなる時間間隔で表現できます。
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++11) |
時間の間隔 (クラステンプレート) |
[編集] 時刻 (C++20 以降)
hh_mm_ss は、深夜からの経過時間を表す時間間隔を、時、分、秒、および必要に応じて秒の小数部に分割します。これは主に書式設定ツールです。
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++20) |
時刻を表す (クラステンプレート) |
| (C++20) |
12時間形式と24時間形式の時刻を相互に変換する (関数) |
[編集] カレンダー (C++20 以降)
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++20) |
月における最後の日または曜日を示すタグクラス (クラス) |
| (C++20) |
月の日を表す (クラス) |
| (C++20) |
年の月を表す (クラス) |
| (C++20) |
グレゴリオ暦の年を表す (クラス) |
| (C++20) |
グレゴリオ暦の曜日を表す (クラス) |
| (C++20) |
月のn番目のweekdayを表す (クラス) |
| (C++20) |
月の最後のweekdayを表す (クラス) |
| (C++20) |
特定のmonthの特定のdayを表す (クラス) |
| (C++20) |
特定のmonthの最終日を表す (クラス) |
| (C++20) |
特定のmonthのn番目のweekdayを表す (クラス) |
| (C++20) |
特定のmonthの最後のweekdayを表す (クラス) |
| (C++20) |
特定のyearの特定のmonthを表す (クラス) |
| (C++20) |
特定のyear、month、dayを表す (クラス) |
| (C++20) |
特定のyearとmonthの最終日を表す (クラス) |
| (C++20) |
特定のyearとmonthのn番目のweekdayを表す (クラス) |
| (C++20) |
特定のyearとmonthの最後のweekdayを表す (クラス) |
| (C++20) |
グレゴリオ暦の日付を作成するための慣用的な構文 (関数) |
[編集] タイムゾーン (C++20 以降)
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++20) |
IANAタイムゾーンデータベースのコピーを記述する (クラス) |
| (C++20) |
tzdbのリンクリストを表す (クラス) |
| グローバルなタイムゾーンデータベース情報にアクセスし、制御する (関数) | |
| (C++20) |
名前に基づいてtime_zoneを検索する (関数) |
| (C++20) |
現在のtime_zoneを返す (関数) |
| (C++20) |
タイムゾーンを表す (クラス) |
| (C++20) |
特定の時間点におけるタイムゾーンに関する情報を表す (クラス) |
| (C++20) |
ローカル時刻からUNIX時刻への変換に関する情報を表す (クラス) |
| (C++20) |
曖昧なローカル時刻をどのように解決するかを選択する (enum) |
| (C++20) |
zoned_timeが使用するタイムゾーンポインタのための特性クラス (クラステンプレート) |
| (C++20) |
タイムゾーンと時間点を表す (クラス) |
| (C++20) |
うるう秒の挿入に関する情報を含む (クラス) |
| (C++20) |
うるう秒の挿入情報 (クラス) |
| (C++20) |
utc_timeオブジェクトからうるう秒の挿入情報を取得する(関数テンプレート) |
| (C++20) |
タイムゾーンの別名を表す (クラス) |
| (C++20) |
ローカル時刻が存在しないことを報告するためにスローされる例外 (クラス) |
| (C++20) |
ローカル時刻が曖昧であることを報告するためにスローされる例外 (クラス) |
[編集] リテラル (C++14 以降)
| ヘッダー
<chrono> で定義 | |
| インライン名前空間
std::literals::chrono_literals で定義 | |
| (C++20) |
特定の年を表す std::chrono::year リテラル (関数) |
| (C++20) |
月の日を表す std::chrono::day リテラル (関数) |
| (C++14) |
時間を表す std::chrono::duration リテラル (関数) |
| (C++14) |
分を表す std::chrono::duration リテラル (関数) |
| (C++14) |
秒を表す std::chrono::duration リテラル (関数) |
| (C++14) |
ミリ秒を表す std::chrono::duration リテラル (関数) |
| (C++14) |
マイクロ秒を表す std::chrono::duration リテラル (関数) |
| (C++14) |
ナノ秒を表す std::chrono::duration リテラル (関数) |
[編集] Chrono I/O (C++20 以降)
| ヘッダー
<chrono> で定義 | |
| 名前空間
std::chrono で定義 | |
| (C++20) |
ストリームから chrono オブジェクトを解析する(関数テンプレート) |
[編集] ノート
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_chrono |
201510L |
(C++17) | std::chrono::duration と std::chrono::time_point のための丸め関数 |
201611L |
(C++17) | std::chrono::duration と std::chrono::time_point のすべてのメンバ関数に対する constexpr | |
201907L |
(C++20) | カレンダーとタイムゾーン | |
202306L |
(C++26) | std::chrono の値クラスに対するハッシュサポート |
[編集] Cスタイルの日付と時刻ライブラリ
std::time_t、std::difftime、CLOCKS_PER_SEC といったCスタイルの日付と時刻関数も提供されています。
[編集] 例
このコードを実行
#include <chrono> #include <iostream> long Fibonacci(unsigned n) { return n < 2 ? n : Fibonacci(n - 1) + Fibonacci(n - 2); } int main() { // Measures and displays an execution time of a function call. const auto start{std::chrono::steady_clock::now()}; const auto fb{Fibonacci(42)}; const auto finish{std::chrono::steady_clock::now()}; const std::chrono::duration<double> elapsed_seconds{finish - start}; std::cout << "Fibonacci(42): " << fb << "\nElapsed time: "; // std::cout << elapsed_seconds.count() << "s\n"; // Before C++20 std::cout << elapsed_seconds << '\n'; // C++20's chrono::duration operator<< // Prints UTC and local time. const auto tp_utc{std::chrono::system_clock::now()}; std::cout << "Current time 'UTC' is: " << tp_utc << "\n" "Current time 'Local' is: " << std::chrono::current_zone()->to_local(tp_utc) << '\n'; }
実行結果の例
Fibonacci(42): 267914296 Elapsed time: 0.728532s Current time 'UTC' is: 2025-02-10 06:22:39.420666960 Current time 'Local' is: 2025-02-10 09:22:39.420666960