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

履歴 編集

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;
  };                    // (1) C++20

  template <class charT, class traits>
  std::basic_ostream<charT, traits>&
    operator<<(std::basic_ostream<charT, traits>& os, const sys_info& si); // (2)
}

概要

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

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

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

効果

  • (2) : siを未規定のフォーマットでosに出力する

戻り値

  • (2) : return os;

#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; // タイムゾーンの略称

  std::cout << std::endl;
  std::cout << si << std::endl; // タイムゾーン情報全体を出力
}

出力例

(未検証)

バージョン

言語

  • C++20

処理系

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