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

履歴 編集

class
<chrono>

std::formatter(C++20)

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

処理系

  • Clang: (9.0時点で実装なし)
  • GCC: (9.2時点で実装なし)
  • Visual C++: (2019 Update 3時点で実装なし)

関連項目

参照