最終更新日時: 2026年02月08日 18時00分28秒 (JST)
yoh が更新

履歴 編集

class
<chrono>

# std::chrono::local-time-format-t(C++20)

    namespace std::chrono {
      template <class Duration>
      struct local-time-format-t {
        local_time<Duration> time;
        const string* abbrev;
        const seconds* offset_sec;
      };
    }

## 概要

`local-time-format-t`は、ローカル時間を文字列フォーマットするために必要な情報をまとめた説明用の型である。

ローカル時間をタイムゾーン付きで文字列フォーマットするには、時間点オブジェクトだけでなくタイムゾーンの情報が追加で必要になる。そのため、`zoned_time`クラスや、タイムゾーン情報をつけた`local_time`オブジェクトを文字列フォーマット対応するために、標準ライブラリの実装内部でこのようなクラスが用意される。

このクラスとメンバ変数は説明用のものであるため、実際にそのような具体的なクラス、具体的なメンバ変数が存在することを期待したプログラムを書くことはできない。

## 文字列フォーマット

名前 | 説明 | 対応バージョン
--- | --- | ---
`formatter` | `std::formatter`クラスの特殊化 | C++20

## 例

    #include <iostream>
    #include <chrono>
    #include <format>

    namespace chrono = std::chrono;

    int main()
    {
      auto now = chrono::system_clock::now();
      chrono::sys_seconds now_sec = chrono::floor<chrono::seconds>(now); // 秒単位

      chrono::zoned_time zt{"Asia/Tokyo", now_sec};
      std::cout << std::format("{:%Y/%m/%d %H:%M:%S %Z}", zt) << std::endl;

      auto lt = zt.get_local_time();
      chrono::sys_info si = zt.get_info();
      {
        auto ltf = chrono::local_time_format(lt, &si.abbrev);
        std::cout << std::format("{:%Y/%m/%d %H:%M:%S %Z}", ltf) << std::endl;
      }
      {
        auto ltf = chrono::local_time_format(lt, &si.abbrev, &si.offset);
        std::cout << std::format("{:%Y/%m/%d %H:%M:%S %Z%z}", ltf) << std::endl;
      }
    }

### 出力例

    2019/12/20 19:05:05 JST
    2019/12/20 19:05:05 JST
    2019/12/20 19:05:05 JST+0900

## バージョン

### 言語

- C++20

### 処理系

- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌