namespace std::chrono {
struct leap_second_info {
bool is_leap_second;
seconds elapsed;
};
}
概要
leap_second_info
は、get_leap_second_info()
関数によって返される、うるう秒の情報を表すクラスである。
各メンバ変数は、以下を意味する:
メンバ変数 | 説明 |
---|---|
is_leap_second |
get_leap_second_info() 関数に指定された日時自身がうるう秒であればtrue 、そうでなければfalse |
elapsed |
1970年1月1日からget_leap_second_info() 関数に指定された日時までにうるう秒が挿入された回数 (秒数)。回数には指定された日時を含む |
例
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
using namespace std::chrono_literals;
int main()
{
std::cout << std::boolalpha;
// 2016-12-31 23:59:59 UTC
chrono::utc_time tp = chrono::clock_cast<chrono::utc_clock>(chrono::sys_days{2017y/1/1});
tp -= 2s;
{
chrono::leap_second_info info = chrono::get_leap_second_info(tp);
std::cout << tp << std::endl;
std::cout << info.is_leap_second << " " << info.elapsed.count() << std::endl;
}
// 日本標準時(JST)2017年1月1日にうるう秒挿入が実施された
// 2016-12-31 23:59:60 UTC
tp += 1s;
{
chrono::leap_second_info info = chrono::get_leap_second_info(tp);
std::cout << tp << std::endl;
std::cout << info.is_leap_second << " " << info.elapsed.count() << std::endl;
}
// 2017-01-01 00:00:00 UTC
tp += 1s;
{
chrono::leap_second_info info = chrono::get_leap_second_info(tp);
std::cout << tp << std::endl;
std::cout << info.is_leap_second << " " << info.elapsed.count() << std::endl;
}
}
出力
2016-12-31 23:59:59
false 26
2016-12-31 23:59:60
true 27
2017-01-01 00:00:00
false 27
処理系
- Clang: 9.0 ❌
- GCC: 9.2 ❌, 13.2 ⭕
- Visual C++: 2019 Update 3 ❌