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

履歴 編集

class
<chrono>

std::chrono::local_info(C++20)

namespace std::chrono {
  struct local_info {
    static constexpr int unique = 0;
    static constexpr int nonexistent = 1;
    static constexpr int ambiguous = 2;
    int result;
    sys_info first;
    sys_info second;
  };
}

概要

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

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

  • local_timeからsys_timeへの変換が一意に決まる場合、result == uniqueとなり、firstが正しいsys_infoで埋められ、secondはゼロ初期化される
    • 存在しないローカル時間が生じる場合、result == nonexistentとなり、firstは直前のローカル時間の終端値の値で埋められ、secondは直後のローカル時間の開始値で埋められる
    • あいまいなローカル時間が生じる場合、result == ambiguousとなり、firstは直後のローカル時間の終端値で埋められ、secondは直前のローカル時間の開始値で埋められる

備考

  • nonexistentおよびambiguousは、サマータイムを採用しているタイムゾーンで生じる可能性がある
    • 存在しないローカル時間の例として、タイムゾーン"America/New_York"のローカル時刻 2016-03-13 02:30:00 は以下の隙間に位置するため存在しえない:
      • 2016-03-13 02:00:00 EST
      • 2016-03-13 03:00:00 EDT
      • 2016-03-13 07:00:00 UTC
    • あいまいなローカル時間の例として、タイムゾーン"America/New_York"のローカル時刻 2016-11-06 01:30:00 は、以下のいずれかとなり、一意に決まらない:
      • 2016-11-06 05:30:00 UTC
      • 2016-11-06 06:30:00 UTC

メンバ変数

変数 説明
unique resultがこの値である場合、local_timeからsys_timeへの変換が一意に決まる
nonexistent resultがこの値である場合、存在しないローカル時間である
ambiguous resultがこの値である場合、重複するローカル時間があるためlocal_timeからsys_timeへの変換が一意に決まらない
first 変換に使用される第1候補のタイムゾーン情報
second 変換に使用される第2候補のタイムゾーン情報

非メンバ関数

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

文字列フォーマット

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

#include <iostream>
#include <chrono>

namespace chrono = std::chrono;

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

  // 日本のタイムゾーン
  const chrono::time_zone* tz = chrono::locate_zone("Asia/Tokyo");
  chrono::local_info li = tz->get_info(local_now);

  std::cout << li.result << std::endl;

  chrono::sys_info si = li.first;
  std::cout << chrono::floor<chrono::hours>(si.offset).count() << " hours" << std::endl; // UTCタイムゾーンからの差分時間
  std::cout << si.abbrev << std::endl; // タイムゾーンの略称
}

出力

0
9 hours
JST

バージョン

言語

  • C++20

処理系

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

参照