• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    class
    <chrono>

    std::chrono::leap_second_info

    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
    

    処理系

    関連項目

    参照