namespace std::chrono {
struct local_info {
static constexpr int unique = 0;
static constexpr int nonexistent = 1;
static constexpr int ambiguous = 2;
int result;
sys_info first;
sys_info second;
};
}
概要
local_info
は、ローカル時間に関するタイムゾーン情報の低レベルインタフェースを提供するクラスである。
このクラスの情報は、local_time
からsys_time
に変換する際に使用される。
local_time
からsys_time
への変換が一意に決まる場合、result == unique
となり、first
が正しいsys_info
で埋められ、second
はゼロ初期化される- 存在しないローカル時間が生じる場合、
result == nonexistent
となり、first
は直前のローカル時間の終端値の値で埋められ、second
は直後のローカル時間の開始値で埋められる - あいまいなローカル時間が生じる場合、
result == ambiguous
となり、first
は直後のローカル時間の終端値で埋められ、second
は直前のローカル時間の開始値で埋められる
- 存在しないローカル時間が生じる場合、
備考
nonexistent
およびambiguous
は、サマータイムを採用しているタイムゾーンで生じる可能性がある- 存在しないローカル時間の例として、タイムゾーン
"America/New_York"
のローカル時刻 2016-03-13 02:30:00 は以下の隙間に位置するため存在しえない:- 2016-03-13 02:00:00 EST
- 2016-03-13 03:00:00 EDT
- 2016-03-13 07:00:00 UTC
- あいまいなローカル時間の例として、タイムゾーン
"America/New_York"
のローカル時刻 2016-11-06 01:30:00 は、以下のいずれかとなり、一意に決まらない:- 2016-11-06 05:30:00 UTC
- 2016-11-06 06:30:00 UTC
- 存在しないローカル時間の例として、タイムゾーン
メンバ変数
変数 | 説明 |
---|---|
unique |
result がこの値である場合、local_time からsys_time への変換が一意に決まる |
nonexistent |
result がこの値である場合、存在しないローカル時間である |
ambiguous |
result がこの値である場合、重複するローカル時間があるためlocal_time からsys_time への変換が一意に決まらない |
first |
変換に使用される第1候補のタイムゾーン情報 |
second |
変換に使用される第2候補のタイムゾーン情報 |
非メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
operator<< |
出力ストリームへの出力 | C++20 |
文字列フォーマット
名前 | 説明 | 対応バージョン |
---|---|---|
formatter |
std::formatter クラスの特殊化 |
C++20 |
例
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
int main()
{
auto now = chrono::system_clock::now();
chrono::local_time local_now{now.time_since_epoch()};
// 日本のタイムゾーン
const chrono::time_zone* tz = chrono::locate_zone("Asia/Tokyo");
chrono::local_info li = tz->get_info(local_now);
std::cout << li.result << std::endl;
chrono::sys_info si = li.first;
std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
std::cout << si.abbrev << std::endl; // タイムゾーンの略称
}
21
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
int main()
{
auto now = chrono::system_clock::now();
chrono::local_time local_now{now.time_since_epoch()};
// 日本のタイムゾーン
const chrono::time_zone* tz = chrono::locate_zone("Asia/Tokyo");
chrono::local_info li = tz->get_info(local_now);
std::cout << li.result << std::endl;
chrono::sys_info si = li.first;
std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
出力
0
9 hours
JST
バージョン
言語
- C++20
処理系
- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌