最終更新日時: 2024年06月11日 22時45分38秒 (JST)
Akira Takahashi が更新

履歴 編集

function
<chrono>

# std::chrono::operator<<(C++20)

    namespace std::chrono {
      template <class charT, class traits, class Duration, class TimeZonePtr>
      basic_ostream<charT, traits>&
        operator<<(basic_ostream<charT, traits>& os,
                   const zoned_time<Duration, TimeZonePtr>& t); // (1) C++20
    }

## 概要

`zoned_time`オブジェクトを出力ストリームに出力する。

この演算子は、`zoned_time`クラスのコンストラクタで設定されたシステム時間もしくはローカル時間を、タイムゾーンを考慮した時間に変換して日時を出力する。

## 効果

`t.get_local_time()`で得られた、タイムゾーンを考慮したローカル時間を、`"%F %T %Z"`フォーマットで`os`に出力する。

- `"%F"`は`"%Y-%m-%d"` (4桁ゼロ埋めの年-2桁ゼロ埋めの月-2桁ゼロ埋めの日) と等価
- `"%T"`は`"%H:%M:%S"` (2桁ゼロ埋めの時:2桁ゼロ埋めの分:2桁ゼロ埋めの秒と小数点以下の時間) と等価
- `"%Z"`はタイムゾーンの略称 (日本は`"JST"`、UTCは`"UTC"`)

## 戻り値

    return os;

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;

    int main()
    {
      auto now = chrono::system_clock::now();

      // タイムゾーンなしで日時を出力する
      // (ローカルタイムゾーンへの変換はしてくれないので、デフォルトではUTCタイムゾーンで出力される)
      std::cout << now << std::endl;

      // タイムゾーン付きで日時を出力する
      std::cout << chrono::zoned_time{now} << std::endl;               // デフォルトタイムゾーン (UTC)
      std::cout << chrono::zoned_time{"Asia/Tokyo", now} << std::endl; // 日本 (UTC + 9時間)
      std::cout << chrono::zoned_time{"UTC", now} << std::endl;        // UTC
    }

### 出力

    2019-12-20 10:05:05
    2019-12-20 10:05:05.330140 UTC
    2019-12-20 19:05:05.330140 JST
    2019-12-20 10:05:05.330140 UTC

## バージョン

### 言語

- C++20

### 処理系

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

## 関連項目

- chronoの`std::format()` (フォーマットの詳細)