次の方法で共有


zoned_time クラス

zoned_timeは、time_zonetime_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_timelocal_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_timesys_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_clockzoned_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_timethis に割り当てます。 または、他の zoned_timesys_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_pointtime_zone ポインターを他の zoned_time からこの zoned_time にコピーします (移動ではありません)。 2) st をこの zoned_timetime_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_timetemplate <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 構造体
ヘッダー ファイル リファレンス