zoned_time
クラス
zoned_time
は、time_zone
と time_point
を組み合わせたものです。 これは、特定のタイム ゾーンにおける time_point
の意味を指定します。
構文
template<class Duration, class TimeZonePtr = const time_zone*>
class zoned_time ; // C++20
解説
zoned_time
は常に有効なタイム ゾーンを参照し、そのタイム ゾーンであいまいでなく、存在する特定の時点を表します。
メンバー
名前 | 説明 |
---|---|
コンストラクター | zoned_time を構築します。 |
get_info |
この zoned_time のタイム ゾーンを使用して、zoned_time の時点に関する情報を取得します。 |
get_local_time |
zoned_time のタイム ゾーンと格納されている時点を組み合わせて、そのタイム ゾーンのローカル時刻を生成します。 |
get_sys_time |
タイム ゾーンを適用せずに、この zoned_time に格納されている時点を取得します。 |
get_time_zone |
この zoned_time に格納されている time_zone を取得します。 |
operator= |
別の zoned_time の値、または別の zoned_time の local_time または sys_time の値をこの zoned_time に割り当てます。 |
operator local_time |
zoned_time のタイム ゾーンと格納されている時点を組み合わせて、そのタイム ゾーンのローカル時刻を生成します。 |
operator sys_time |
タイム ゾーンを適用せずに、この zoned_time に格納されている時間を取得します。 |
非メンバー
名前 | 説明 |
---|---|
operator== |
2 つの zoned_time インスタンスが等しいかどうかを判断します。 |
operator<< |
指定したストリームに zoned_time を出力します。 |
便利な型のエイリアス
名前 | 説明 |
---|---|
zoned_seconds |
zoned_time<seconds>; と同義 |
zoned_time::duration |
秒単位で測定された期間。 common_type_t<Duration, seconds>; と同義 |
要件
ヘッダー: <chrono>
Microsoft C++ では、Visual Studio 2019 バージョン 16.10 以降の zoned_time
クラスをサポートしています。
タイム ゾーン データは、Windows 10 バージョン 1903/19H1 以降および Windows Server 2022 以降でのみ使用できます。
名前空間: std::chrono
コンパイラ オプション: /std:c++latest
コンストラクター
zoned_time
を構築します。
1) zoned_time();
2) zoned_time(const zoned_time& zt) = default;
3) explicit zoned_time(TimeZonePtr z);
4) zoned_time(const sys_time<Duration>& st);
5) explicit zoned_time(string_view name);
6) zoned_time(TimeZonePtr z, const local_time<Duration>& tp);
7) zoned_time(TimeZonePtr z, const local_time<Duration>& tp, choose c);
8) zoned_time(TimeZonePtr z, const sys_time<Duration>& st);
9) zoned_time(string_view name, const local_time<Duration>& tp);
10) zoned_time(string_view name, const local_time<Duration>& tp, choose c);
11) zoned_time(string_view name, const sys_time<Duration>& st);
12) template<class Duration, class TimeZonePtr> zoned_time(string_view name, const zoned_time<Duration>& y);
13) template<class Duration, class TimeZonePtr> zoned_time(string_view name, const zoned_time<Duration>& y, choose c);
14) template<class Duration> zoned_time(const zoned_time<Duration, TimeZonePtr>& y);
15) template<class Duration, class TimeZonePtr> zoned_time(TimeZonePtr z, const zoned_time<Duration, TimeZonePtr>& y);
16) template<class Duration, class TimeZonePtr> zoned_time(TimeZonePtr z, const zoned_time<Duration, TimeZonePtr>& y, choose);
パラメーター
c
local_time
を sys_time
に変換する際に、あいまいな、または存在しないローカル時刻を処理する方法を示します。 詳細については、「choose
列挙型」を参照してください。
name
タイム ゾーンの名前。
st
指定した期間の sys_time
。 時刻を設定するために使用します。
tp
指定した期間の local_time
。 時刻を設定するために使用します。
y
新しい zoned_time
を構築するためにコピーされた zoned_time
。
z
構築された zoned_time
に対して std::move(z)
が行われた time_zone
。
zt
構築された zoned_time
に対して std::move(zt)
が行われた zoned_time
ポインター。
解説
1) traits::default_zone()
を使用してタイム ゾーンを初期化し、既定で時点を構築します。
2) 既定のコピー コンストラクター。
3) std::move(z)
を使用してタイム ゾーンを初期化し、既定で時点を構築します。
4) traits::default_zone()
を使用してタイム ゾーンを初期化し、st
を使用して時刻を初期化します。
5) traits::locate_zone(name)
を使用してタイム ゾーンを初期化し、既定で時点を構築します。
6) std::move(z)
を使用してタイム ゾーンを初期化し、z->to_sys(tp)
のように tp
を変換して時間を初期化します。
7) std::move(z)
を使用してタイム ゾーンを初期化し、z->to_sys(tp, c)
を使用して時刻を初期化します。 パラメーター c
が結果に与える影響については、「choose
列挙型」を参照してください。
8) std::move(z)
を使用してタイム ゾーンを初期化し、st
を使用して時刻を初期化します。
9) {traits::locate_zone(name), tp}
を使用した構築に相当します。
10) {traits::locate_zone(name), tp, c}
を使用した構築に相当します。
11) {traits::locate_zone(name), st}
を使用した構築に相当します。
12) {traits::locate_zone(name), y}
を使用した構築に相当します。
13) {traits::locate_zone(name), y, c}
を使用した構築に相当します。 この choose
パラメーター (c
) は何も作用しません。
14) y
のタイム ゾーンと時点からタイム ゾーンを初期化します。
15) std::move(z)
を使用してタイム ゾーンを初期化し、y
の時点から時刻を初期化します。
16) {z, y}
を使用した構築に相当します。 この choose
パラメーター (c
) は何も作用しません。
Note
zoned_time
には移動コンストラクターは含まれていません。 移動しようとすると、既定のコピー コンストラクターを使用してコピーが行われます。
例: zoned_time
を構築する
次の例は、タイム ゾーン "Antarctica/Casey"
の zoned_time
インスタンスを作成する方法を示しています (2021/9/15 の午前 4 時 45 分)。
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
std::cout << zt;
return 0;
}
2021-09-16 03:45:00 GMT+11
get_info
この zoned_time
のタイム ゾーンを使用して、zoned_time
の時点に関する情報を取得します。
sys_info get_info() const;
戻り値
タイム ゾーンと時刻の UTC オフセット、サマー タイムの調整オフセットなどを格納している sys_info
。
例: get_info
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
sys_info si = zt.get_info();
std::cout << si;
return 0;
}
begin: 2020-10-03 16:01:00, end: 32767-12-31 23:59:59, offset: 39600s, save: 0min, abbrev: GMT+11
get_local_time
この zoned_time
のタイム ゾーンと時点を指定したローカル時刻を表す local_time<duration>
を取得します。
local_time<duration> get_local_time() const;
戻り値
返される local_time
は、time_point<local_t, duration>
の同義です。
例: get_local_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
std::cout << zt.get_info();
return 0;
}
2021-09-16 03:45:00
get_sys_time
system_clock
の zoned_time
に格納されている時刻を取得します。
sys_time<duration> get_sys_time() const;
戻り値
タイム ゾーンをまったく調整していない、この zoned_time
に格納されている時刻。 これは、システム全体の実時間を time_point として表します。 返される sys_time
は、template <class Duration> time_point<system_clock Duration>;
の同義です
例: get_sys_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
std::cout << zt.get_sys_time();
return 0;
}
2021-09-15 16:45:00
get_time_zone
この zoned_time
に格納されているタイム ゾーンを取得します。
TimeZonePtr get_time_zone() const;
戻り値
この zoned_time
に格納されている time_zone へのポインター。
例: get_time_zone
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Antarctica/Casey", sys_days{2021y/September/15d}+16h+45min);
auto pTZ = zt.get_time_zone();
std::cout << pTZ->name();
return 0;
}
Antarctica/Casey
operator=
別の zoned_time
を this
に割り当てます。 または、他の zoned_time
の sys_time
または local_time
のみを割り当てます。
1) zoned_time& operator=(const zoned_time& zt) = default;
2) zoned_time& operator=(const sys_time<Duration>& st);
3) zoned_time& operator=(const local_time<Duration>& lt);
パラメーター
zt
this
に割り当てる zoned_time
。
st
この zoned_time
に格納されている time_point
に割り当てる sys_time
。
lt
この zoned_time
に格納されている time_point
に割り当てる local_time
。
戻り値
*this
例: operator=
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt1{}, zt2("Pacific/Galapagos", sys_days{2021y/September/15d} + 16h + 45min);
std::cout << zt2.get_local_time() << "\n";
zt1 = zt2.get_local_time();
std::cout << zt1.get_local_time();
return 0;
}
2021-09-15 10:45:00
2021-09-15 10:45:00
解説
1) 既定のコピー代入演算子。 格納されている time_point
と time_zone ポインターを他の zoned_time
からこの zoned_time
にコピーします (移動ではありません)。
2) st
をこの zoned_time
の time_point
に割り当てます。 割り当て後、*this->get_sys_time() == st;
3) lt
(local_time
) を sys_time
に変換します。 これは基本的には timeZone->to_sys(lt)
として実行され、この zoned_time
の [time_point
] に結果を割り当てます。 割り当て後、*this->get_local_time() == lt;
operator local_time
zoned_time
のタイム ゾーンと格納されている時点を組み合わせて、そのタイム ゾーンのローカル時刻を生成します。
explicit operator local_time<duration>() const;
戻り値
この zoned_time
の時刻とタイム ゾーンのローカル時間を表す time_point<local_t, Duration>
。 便利な別名 local_time
を使用して、この関数に返される値を表すことができます。
事実上、戻り値は timeZone->to_local(get_sys_time());
となります
例: operator local_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Pacific/Galapagos", sys_days{ 2021y / September / 15d } + 16h + 45min);
std::cout << (local_time<seconds>)zt;
return 0;
}
2021-09-15 10:45:00
operator sys_time
タイム ゾーンを適用せずに、この zoned_time
に格納されている時点を取得します。
operator sys_time<duration>() const;
戻り値
タイム ゾーンをまったく調整していない、この zoned_time
に格納されている時刻。 返される sys_time
は template <class Duration> time_point<system_clock Duration>;
の同義で、この zoned_time
に格納されているのと同じ時点を表します。
例: operator sys_time
// compile using: /std:c++latest
#include <iostream>
#include <chrono>
using namespace std::chrono;
int main()
{
zoned_time zt("Pacific/Galapagos", sys_days{2021y/September/15d} + 16h + 45min);
std::cout << (sys_time<seconds>)zt;
return 0;
}
2021-09-15 16:45:00
関連項目
<chrono>
time_point
time_zone
zoned_traits
構造体
ヘッダー ファイル リファレンス