namespace std::chrono {
struct sys_info {
sys_seconds begin;
sys_seconds end;
seconds offset;
minutes save;
string abbrev;
};
}
概要
sys_infoは、システム時間に関するタイムゾーン情報の低レベルインタフェースを提供するクラスである。
このクラスの情報は、sys_timeからlocal_timeに変換する際に使用される。
メンバ変数
| 変数 | 説明 |
|---|---|
begin, end |
関連するtime_zone、time_point、offset、abbrevが[begin, end)の範囲内で有効であることを意味する。この情報を利用することで、タイムゾーン遷移を効率的にイテレートできる |
offset |
関連するtime_zone、time_pointに対して有効な、UTCタイムゾーンに対する差分時間を意味する。offset = local_time - sys_timeの関係が成り立つ |
save |
このメンバ変数は、local_timeとsys_timeの間の変換では通常、必要にならない情報である。save != 0minの場合、そのsys_infoは「サマータイム ("daylight saving" time)」にあると言われ、そのtime_zoneがサマータイムから外れている場合に使用するオフセットとしてoffset - saveを使用することを推奨する。ただし、この情報は信頼すべきものと見なすことは推奨しない。そのような情報を取得する唯一の確実な方法は、 save == 0minであるsys_infoを返すtime_pointでtime_zoneを照会することである。time_pointがそのようなsys_infoを返す保証はないが、save != 0minのsys_infoは、[begin, end)の範囲内にないことが保証される |
abbrev |
関連するtime_zoneおよびtime_pointに使用される現在の「略称 (abbreviation)」を意味する。略称はタイムゾーンごとに一意に定まるわけではないため、略称からタイムゾーンおよびUTCタイムゾーンからのオフセット時間を確実にマッピングすることはできない |
非メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
operator<< |
出力ストリームへの出力 | C++20 |
文字列フォーマット
| 名前 | 説明 | 対応バージョン |
|---|---|---|
formatter |
std::formatterクラスの特殊化 |
C++20 |
例
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
int main()
{
auto now = chrono::system_clock::now();
// 日本のタイムゾーン
const chrono::time_zone* tz = chrono::locate_zone("Asia/Tokyo");
chrono::sys_info si = tz->get_info(now);
std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
std::cout << si.abbrev << std::endl; // タイムゾーンの略称
}
出力
9 hours
JST
バージョン
言語
- C++20
処理系
- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌