• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

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

    履歴 編集

    class
    <chrono>

    std::formatter

    namespace std {
      template <class Rep, class Period, class charT>
      struct formatter<chrono::duration<Rep, Period>, charT>;
    }
    

    概要

    durationクラスに対するstd::formatterクラステンプレートの特殊化。

    フォーマットフラグとしては、以下を使用できる:

    フォーマットフラグ 説明
    %j daysの10進数値として0埋めなしで書式化される
    %q duration単位ごとのサフィックス。durationoperator<<で出力されるサフィックスと等価
    %Q durationの数値。.count()で取得した値
    %S 2桁0埋めの秒
    %M 2桁0埋めの分
    %H 24時間時計での2桁0埋めの時
    %I 12時間時計での2桁0埋めの時
    %p 12時間時計でのロケール依存の午前・午後の表現

    備考

    • Repが浮動小数点数である場合のみ、フォーマットとして浮動小数点数の精度を指定でき、そうでない場合に指定するとstd::format_error例外が送出される
    • durationに対するフォーマットは深夜0時からの経過時間として扱われ、一日内の時間として出力される (例として"%H", "%I", "%p"など)

    #include <iostream>
    #include <chrono>
    #include <format>
    
    namespace chrono = std::chrono;
    
    int main()
    {
      // デフォルトフォーマットは、operator<<で出力されるものと同じ
      std::cout << std::format("{}", chrono::seconds{3}) << std::endl;
    
      // 単位ごとのサフィックス
      std::cout << std::format("{:%q}", chrono::seconds{3}) << std::endl;
    
      // duration::count()で取得した値
      std::cout << std::format("{:%Q}", chrono::seconds{3}) << std::endl;
    
      // フォーマットフラグを使用した場合、サフィックスは出力されない
      std::cout << std::format("seconds : {:%S}", chrono::seconds{3}) << std::endl;
      std::cout << std::format("minutes : {:%M}", chrono::minutes{3}) << std::endl;
      std::cout << std::format("24-hours : {:%H}", chrono::hours{15}) << std::endl;
      std::cout << std::format("12-hours : {:%I}", chrono::hours{15}) << std::endl;
      std::cout << std::format("AM/PM : {:%p %I:00}", chrono::hours{15}) << std::endl;
    }
    

    出力

    3s
    s
    3
    seconds : 03
    minutes : 03
    24-hours : 15
    12-hours : 03
    AM/PM : PM 03:00
    

    バージョン

    言語

    • C++20

    処理系

    関連項目

    参照