class
std::chrono::zoned_time(C++20)
namespace std::chrono {
template <class Duration, class TimeZonePtr = const time_zone*>
class zoned_time;
using zoned_seconds = zoned_time<seconds>;
}
概要
zoned_time
は、タイムゾーンを考慮した時間軸上の一点を表す型である。この型は、テンプレートパラメータとして時間間隔をとる。
秒単位の時間間隔を扱う別名として、zoned_seconds
も定義される。
zoned_time
はtime_point
とtime_zone
の組である。有効なタイムゾーンを常にもち、あいまいなタイムゾーンを参照するようなことにはならないという不変条件をもつ。
このクラスを介することで、UTCタイムゾーンをもつシステム時間を指定したタイムゾーンのローカル時間に変換でき、またその逆の変換もできる。
このクラスに対する出力ストリームの演算子は、タイムゾーンを考慮したローカル時間を出力するため、単にタイムゾーンを考慮した日時を出力したい場合にも使用できる。
- テンプレートパラメータ
Duration
がduration
クラスの特殊化であること
メンバ関数
構築/コピー/破棄
変換
観測
非メンバ関数
比較演算
名前 |
説明 |
対応バージョン |
operator== |
等値比較を行う |
C++20 |
template<class Duration1, class Duration2, class TimeZonePtr> bool operator!=(const zoned_time<Duration1, TimeZonePtr>& x, const zoned_time<Duration2, TimeZonePtr>& y); |
非等値比較を行う (== により使用可能) |
C++20 |
入出力
推論補助
文字列フォーマットサポート
ハッシュサポート
名前 |
説明 |
対応バージョン |
template <class T> struct hash; |
hash クラスの先行宣言 |
C++26 |
template<class Duration, class TimeZonePtr> struct hash<chrono::zoned_time<Duration, TimeZonePtr>>; |
hash クラスのzoned_time に対する特殊化。hash<Duration> とhash<TimeZonePtr> が有効な場合のみ有効 |
C++26 |
例
基本的な使い方
出力例
1 : 2019-12-20 10:05:05
2 : 2019-12-20 10:05:05.330140 UTC
3 : 2019-12-20 19:05:05.330140 JST
4 : 2019-12-20 10:05:05.330140 UTC
5 : 2019-12-20 19:05:05 JST
6 : 2019-12-20 19:05:05.330140 JST
7 : 2019-12-20 19:05:05
文字列フォーマットの例
#include <iostream>
#include <chrono>
#include <format>
namespace chrono = std::chrono;
int main()
{
// システム時間はUTCタイムゾーンをもつ
auto now = chrono::system_clock::now();
chrono::sys_seconds now_sec = chrono::floor<chrono::seconds>(now); // 秒単位
chrono::zoned_time zt{"Asia/Tokyo", now};
chrono::zoned_seconds zt_sec{"Asia/Tokyo", now_sec};
// デフォルトフォーマット
std::cout << std::format("1 : {}", zt) << std::endl;
std::cout << std::format("2 : {}", zt_sec) << std::endl;
// 「年月日 時分秒」のフォーマット
std::cout << std::format("3 : {:%Y年%m月%d日 %H時%M分%S秒}", zt_sec) << std::endl;
// 日付を / (スラッシュ) 区切り、時間を : (コロン) 区切り
std::cout << std::format("4 : {0:%Y/%m/%d %H:%M:%S}", zt_sec) << std::endl;
// 日付だけ出力
std::cout << std::format("5 : %Y年%m月%d日", zt_sec) << std::endl;
std::cout << std::format("6 : %F", zt_sec) << std::endl;
// 時間だけ出力
std::cout << std::format("7 : %H時%M分%S秒", zt_sec) << std::endl;
std::cout << std::format("8 : %T", zt_sec) << std::endl;
// 12時間時計で出力
// (%pでロケール固有の「午前」「午後」を出力するには、日本のロケールを指定する必要がある)
std::cout << std::format(std::locale("ja_JP.UTF-8"), "9 : %Y年%m月%d日 %p %I時%M分%S秒", zt_sec) << std::endl;
}
出力例
1 : 2019-12-20 19:05:05.330140 JST
2 : 2019-12-20 19:05:05 JST
3 : 2019年12月20日 19時05分05秒
4 : 2019/12/20 19:05:05
5 : 2019年12月20日
6 : 2019-12-20
7 : 19時05分05秒
8 : 19:05:05
9 : 2019年12月20日 午後 07時05分05秒
バージョン
言語
処理系
参照