最終更新日時: 2025年07月12日 02時16分44秒 (JST)
Koichi Murase が更新

履歴 編集

class
<chrono>

# std::chrono::sys_info(C++20)

    namespace std::chrono {
      struct sys_info {
        sys_seconds begin;
        sys_seconds end;
        seconds offset;
        minutes save;
        string abbrev;
      };
    }

## 概要

`sys_info`は、システム時間に関するタイムゾーン情報の低レベルインタフェースを提供するクラスである。

このクラスの情報は、`sys_time`から`local_time`に変換する際に使用される。

## メンバ変数

変数 | 説明
--- | ---
`begin`, `end` | 関連する`time_zone`、`time_point`、`offset`、`abbrev`が`[begin, end)`の範囲内で有効であることを意味する。 この情報を利用することで、タイムゾーン遷移を効率的にイテレートできる
`offset` | 関連する`time_zone`、`time_point`に対して有効な、UTCタイムゾーンに対する差分時間を意味する。 `offset = local_time - sys_time`の関係が成り立つ
`save` | このメンバ変数は、`local_time`と`sys_time`の間の変換では通常、必要にならない情報である。 `save != 0min`の場合、その`sys_info`は「サマータイム ("daylight saving" time)」にあると言われ、その`time_zone`がサマータイムから外れている場合に使用するオフセットとして`offset - save`を使用することを推奨する。 ただし、この情報は信頼すべきものと見なすことは推奨しない。そのような情報を取得する唯一の確実な方法は、`save == 0min`である`sys_info`を返す`time_point`で`time_zone`を照会することである。 `time_point`がそのような`sys_info`を返す保証はないが、`save != 0min`の`sys_info`は、`[begin, end)`の範囲内にないことが保証される
`abbrev` | 関連する`time_zone`および`time_point`に使用される現在の「略称 (abbreviation)」を意味する。略称はタイムゾーンごとに一意に定まるわけではないため、略称からタイムゾーンおよびUTCタイムゾーンからのオフセット時間を確実にマッピングすることはできない

## 非メンバ関数

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator<<` | 出力ストリームへの出力 | C++20

## 文字列フォーマット

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

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;

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

      // 日本のタイムゾーン
      const chrono::time_zone* tz = chrono::locate_zone("Asia/Tokyo");
      chrono::sys_info si = tz->get_info(now);
      std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
      std::cout << si.abbrev << std::endl; // タイムゾーンの略称
    }

### 出力

    9 hours
    JST

## バージョン

### 言語

- C++20

### 処理系

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