最終更新日時: 2025年09月26日 23時17分05秒 (JST)
Raclamusi が更新

履歴 編集

function
<chrono>

# std::chrono::zoned_time::operator local_time(C++20)

    explicit operator local_time<duration>() const; // (1) C++20

## 概要

ローカル時間`local_time`に明示的に型変換する。

この関数によって、タイムゾーンを考慮した時間への変換が行われる (UTC -> 日本時間であれば9時間が加算される)。

## 戻り値

    return get_local_time();

## 例

    #include <cassert>
    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;
    using namespace std::chrono_literals;

    int main()
    {
      auto now = chrono::system_clock::now();
      chrono::local_time local_now{now.time_since_epoch()};
      chrono::local_time local_jst_now = local_now + chrono::hours{9};

      // UTCタイムゾーンのシステム時間から、Asia/Tokyoタイムゾーンのローカル時間に変換する
      chrono::zoned_time zt1{"Asia/Tokyo", now};
      chrono::local_time<decltype(now)::duration> lt1{zt1};
      assert(lt1 == local_jst_now);

      // Asia/Tokyoタイムゾーンのローカル時間から、Asia/Tokyoタイムゾーンのローカル時間に変換する
      chrono::zoned_time zt2{"Asia/Tokyo", local_jst_now};
      chrono::local_time<decltype(now)::duration> lt2{zt2};
      assert(lt2 == local_jst_now);

      std::cout << "system now (UTC) : " << now << std::endl;
      std::cout << "local now (UTC) : " << local_now << std::endl;
      std::cout << "local now (JST) : " << local_jst_now << std::endl;
      std::cout << "local now (JST) converted from system now (UTC) : " << lt1 << std::endl;
      std::cout << "local now (JST) converted from local now (JST) : " << lt2 << std::endl;
    }

### 出力例

    system now (UTC) : 2020-01-21 05:10:15
    local now (UTC) : 2020-01-21 05:10:15
    local now (JST) : 2020-01-21 14:10:15
    local now (JST) converted from system now (UTC) : 2020-01-21 14:10:15
    local now (JST) converted from local now (JST) : 2020-01-21 14:10:15

## バージョン

### 言語

- C++20

### 処理系

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