最終更新日時: 2024年06月20日 18時40分21秒 (JST)
yoh が更新

履歴 編集

<chrono>

# chrono(C++11)

`<chrono>`ヘッダは、時間に関するユーティリティとして機能する関数・クラスを提供する。このヘッダに含まれる関数・クラスは、`std::chrono`名前空間で定義される。

このライブラリは、タイムアウト、操作間隔、スケジューリングといった短期間の操作を主な用途として想定している。そのためカレンダー機能としては遥かな過去・未来を扱えるようにはなっていない。

このヘッダでは、以下の標準ヘッダをインクルードする：

- `<compare>` (C++20)

## 時間を表す型

名前 | 説明 | 対応バージョン
--- | --- | ---
`duration` | 時間の間隔(class template) | C++11
`time_point` | 時間軸上の一点(class template) | C++11
`treat_as_floating_point` | `duration`内部表現の型が浮動小数点型かを判定するためのトレイト(class template) | C++11
`duration_values` | `duration`内部表現の特別な値を取得するためのトレイト(class template) | C++11

## 時間の単位を表す型

名前 | 説明 | 対応バージョン
--- | --- | ---
`nanoseconds` | ナノ秒を表現するためのdurationの別名(type-alias) | C++11
`microseconds` | マイクロ秒を表現するためのdurationの別名(type-alias) | C++11
`milliseconds` | ミリ秒を表現するためのdurationの別名(type-alias) | C++11
`seconds` | 秒を表現するためのdurationの別名(type-alias) | C++11
`minutes` | 分を表現するためのdurationの別名(type-alias) | C++11
`hours` | 時を表現するためのdurationの別名(type-alias) | C++11
`days` | 日を表現するためのdurationの別名(type-alias) | C++20
`weeks` | 週を表現するためのdurationの別名(type-alias) | C++20
`years` | 年を表現するためのdurationの別名(type-alias) | C++20
`months` | 月を表現するためのdurationの別名(type-alias) | C++20

## 時計型

名前 | 説明 | 対応バージョン
--- | --- | ---
`is_clock` | クロック型かを判定する (class template) | C++20
`system_clock` | システム時間のクロック(class) | C++11
`steady_clock` | 時間が逆行しないクロック(class) | C++11
`high_resolution_clock` | 高分解能クロック(class) | C++11
`utc_clock` | UTC時間 (協定世界時) のクロック (class) | C++20
`tai_clock` | TAI時間 (国際原子時) のクロック (class) | C++20
`gps_clock` | GPS時間のクロック (class) | C++20
`file_clock` | ファイル時間を作るために使用されるクロック (type-alias) | C++20

### システム時間用の機能

名前 | 説明 | 対応バージョン
--- | --- | ---
`sys_time` | システム時間の一点を指すtime_pointの別名 (type-alias) | C++20
`sys_seconds` | 秒単位でシステム時間の一点を指すtime_pointの別名 (type-alias) | C++20
`sys_days` | 日単位でシステム時間の一点を指すtime_pointの別名 (type-alias) | C++20

### ローカル時間用の機能

名前 | 説明 | 対応バージョン
--- | --- | ---
`local_t` | ローカル時間を表す擬似的なクロック (class) | C++20
`local_time` | ローカル時間の一点を指すtime_pointの別名 (type-alias) | C++20
`local_seconds` | 秒単位でローカル時間の一点を指すtime_pointの別名 (type-alias) | C++20
`local_days` | 日単位でローカル時間の一点を指すtime_pointの別名 (type-alias) | C++20

### UTC時間用の機能

名前 | 説明 | 対応バージョン
--- | --- | ---
`utc_time` | UTC時間の一点を指すtime_pointの別名 (type-alias) | C++20
`utc_seconds` | 秒単位でUTC時間の一点を指すtime_pointの別名 (type-alias) | C++20

### TAI時間用の機能

名前 | 説明 | 対応バージョン
--- | --- | ---
`tai_time` | TAI時間の一点を指すtime_pointの別名 (type-alias) | C++20
`tai_seconds` | 秒単位でTAI時間の一点を指すtime_pointの別名 (type-alias) | C++20

### GPS時間用の機能

名前 | 説明 | 対応バージョン
--- | --- | ---
`gps_time` | GPS時間の一点を指すtime_pointの別名 (type-alias) | C++20
`gps_seconds` | 秒単位でGPS時間の一点を指すtime_pointの別名 (type-alias) | C++20

### ファイル時間用の機能

名前 | 説明 | 対応バージョン
--- | --- | ---
`file_time` | ファイル時間の一点を指すtime_pointの別名 (type-alias) | C++20

### 時計時間の変換

名前 | 説明 | 対応バージョン
--- | --- | ---
`clock_time_conversion` | 時計間の変換方法を組み合わせごとに定義するためのクラス (class template) | C++20
`clock_cast` | ほかの時計時間のtime_pointに変換する (function template) | C++20

### うるう秒の情報

名前 | 説明 | 対応バージョン
--- | --- | ---
`leap_second_info` | うるう秒の情報を扱うクラス (class) | C++20
`get_leap_second_info` | 指定した日時までに挿入されたうるう秒の回数を取得する (function template) | C++20

## カレンダー型

名前 | 説明 | 対応バージョン
--- | --- | ---
`last_spec` | 月の最終日、月の最終曜日など、文脈に応じた「最後」を表す型 (class) | C++20
`day` | 未規定の月の指定した日を表す型 (class) | C++20
`month` | 月単体の値を表す型 (class) | C++20
`year` | カレンダーの年を表す型 (class) | C++20
`weekday` | 週の日を表す型 (class) | C++20
`weekday_indexed` | N回目の指定した曜日を表す型 (class) | C++20
`weekday_last` | 未規定の月の最後の指定した曜日を表す型 (class) | C++20
`month_day` | 月と日を表す型 (class) | C++20
`month_day_last` | 指定した月の最終日を表す型 (class) | C++20
`month_weekday` | 月の指定したN番目の曜日を表す型 (class) | C++20
`month_weekday_last` | 月の指定した最終回目の曜日を表す型 (class) | C++20
`year_month` | 年と月を表す型 (class) | C++20
`year_month_day` | 年、月、日を表す型 (class) | C++20
`year_month_day_last` | 年、月、月の最終日を表す型 (class) | C++20
`year_month_weekday` | 年、月、N回目の指定した曜日を表す型 (class) | C++20
`year_month_weekday_last` | 年、月、月の最後の指定した曜日を表す型 (class) | C++20

## 1日内の時間情報

名前 | 説明 | 対応バージョン
--- | --- | ---
`hh_mm_ss` | 時間間隔を時、分、秒に分割するクラス (class) | C++20
`is_am` | 時間が午前かを判定する (function) | C++20
`is_pm` | 時間が午後かを判定する (function) | C++20
`make12` | 24時間ベースの時間を12時間ベースの時間範囲に変換する (function) | C++20
`make24` | 12時間ベースの時間を24時間ベースの時間範囲に変換する (function) | C++20

## タイムゾーン

### タイムゾーンのデータベース

名前 | 説明 | 対応バージョン
--- | --- | ---
`tzdb` | タイムゾーンのデータベース型 (class) | C++20
`get_tzdb` | タイムゾーンデータベースを取得する (function) | C++20
`tzdb_list` | タイムゾーンデータベースのリスト (class) | C++20
`get_tzdb_list` | タイムゾーンデータベースのリストを取得する (function) | C++20
`locate_zone` | 指定した名前のタイムゾーンを取得する (function) | C++20
`current_zone` | 現在のタイムゾーンを取得する (function) | C++20

### リモートタイムゾーンデータベースのサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`reload_tzdb` | リモートタイムゾーンデータベースを再読み込みする (function) | C++20
`remote_version` | リモートタイムゾーンデータベースの最新バージョン番号を取得する (function) | C++20

### 例外クラス

名前 | 説明 | 対応バージョン
--- | --- | ---
`nonexistent_local_time` | 存在しないローカル時間をシステム時間に変換しようとした (class) | C++20
`ambiguous_local_time` | ローカル時間があいまい (class) | C++20

### タイムゾーン

名前 | 説明 | 対応バージョン
--- | --- | ---
`sys_info` | システム時間用のタイムゾーン情報 (class) | C++20
`local_info` | ローカル時間用のタイムゾーン情報 (class) | C++20
`choose` | タイムゾーンを変換する際に、早い時間側と遅い時間側どちらに丸めるかの種類 (enum) | C++20
`time_zone` | タイムゾーンの変換を扱うクラス (class) | C++20
`zoned_traits` | タイムゾーン取得のカスタマイズ用中間インタフェース (class) | C++20
`zoned_time` | タイムゾーンを考慮した時間軸上の一点を表す型 (class) | C++20
`zoned_seconds` | 秒単位でタイムゾーンを考慮した時間軸上の一点を表す型 (type-alias) | C++20

### うるう秒サポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`leap_second` | うるう秒が挿入された日時を表す型 (class) | C++20

### リンク

名前 | 説明 | 対応バージョン
--- | --- | ---
`time_zone_link` | タイムゾーンの代替名を管理する型 (class) | C++20

## 文字列フォーマット

名前 | 説明 | 対応バージョン
--- | --- | ---
`local-time-format-t` | ローカル時間を文字列フォーマットするために必要な情報をまとめた説明用の型 (class template) | C++20
`local_time_format` | ローカル時間の文字列フォーマット用オブジェクトを生成する (function template) | C++20
`format` | 文字列フォーマット | C++20

## 文字列解析

名前 | 説明 | 対応バージョン
--- | --- | ---
`parse` | 日時文字列を解析する入力マニピュレータ (function template) | C++20

## カレンダー定数

### 最後

名前 | 説明 | 対応バージョン
--- | --- | ---
`last` | 月の最終日、月の最終曜日など、文脈に応じた「最後」を表す定数 (variable) | C++20

### 曜日

名前 | 説明 | 対応バージョン
--- | --- | ---
`Sunday` | 日曜日を表す定数 (variable) | C++20
`Monday` | 月曜日を表す定数 (variable) | C++20
`Tuesday` | 火曜日を表す定数 (variable) | C++20
`Wednesday` | 水曜日を表す定数 (variable) | C++20
`Thursday` | 木曜日を表す定数 (variable) | C++20
`Friday` | 金曜日を表す定数 (variable) | C++20
`Saturday` | 土曜日を表す定数 (variable) | C++20

### 月

名前 | 説明 | 対応バージョン
--- | --- | ---
`January` | 1月を表す定数 (variable) | C++20
`February` | 2月を表す定数 (variable) | C++20
`March` | 3月を表す定数 (variable) | C++20
`April` | 4月を表す定数 (variable) | C++20
`May` | 5月を表す定数 (variable) | C++20
`June` | 6月を表す定数 (variable) | C++20
`July` | 7月を表す定数 (variable) | C++20
`August` | 8月を表す定数 (variable) | C++20
`September` | 9月を表す定数 (variable) | C++20
`October` | 10月を表す定数 (variable) | C++20
`November` | 11月を表す定数 (variable) | C++20
`December` | 12月を表す定数 (variable) | C++20

## バージョン

### 言語

- C++11

## 参照

- N2661 A Foundation to Sleep On
- P0216R0 C++ Standard Proposal — A Time-Zone Library
- P0355R7 Extending `<chrono>` to Calendars and Time Zones
- P2051R0 C++ Standard Library Issues to be moved in Prague