最終更新日時(UTC):
が更新

履歴 編集

class
<chrono>

std::chrono::leap_second_info(C++20)

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

処理系

関連項目

参照