共用方式為


zoned_time 類別

zoned_time是和time_pointtime_zone配對。 它會在特定時區內提供 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_timetime_zone
operator= 將另一個 或 另一 zoned_timezoned_timelocal_timesys_time的值指派給這個 zoned_time
operator local_time 結合 zoned_time的時區與預存時間點,以在該時區產生當地時間。
operator sys_time 取得儲存在這個 中 zoned_time 而不套用時區的時間。

非成員

名稱 描述
operator== 判斷兩個 zoned_time 實例是否相等。
operator<< zoned_time將 輸出至指定的數據流。

便利類型別名

名稱 描述
zoned_seconds 同義字 zoned_time<seconds>;
zoned_time::duration 以秒為單位的持續時間。 這是同義字 common_type_t<Duration, seconds>;

需求

頁眉: <chrono>

Microsoft C++支援 zoned_time 從 Visual Studio 2019 16.10 版開始的 類別。

時區數據僅適用於 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
time_zone,'std::move(z)d 到建構的 zoned_time中。

zt
zoned_time'd 到建構 zoned_time的指標std::move(zt)

備註

1) 使用 traits::default_zone()初始化時區,且預設會建構時間點。
2) 預設複製建構函式。
3) 使用 std::move(z)初始化時區,且預設會建構時間點。
4) 使用 traits::default_zone()初始化時區,並使用 初始化時間 st
5) 使用 traits::locate_zone(name) 初始化時區,並預設建構時間點。
6) 使用 std::move(z)初始化時區,以及透過 轉換 tp 的時間,就像 是一 z->to_sys(tp)樣。
7) 使用 std::move(z)初始化時區,並以 來初始化時間,就像 是一 z->to_sys(tp, c)樣。 如需參數如何影響結果,請參閱choose列舉c
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沒有作用。

注意

zoned_time 沒有移動建構函式。 嘗試移動它會導致使用預設複製建構函式的複本。

範例:建構 zoned_time

下列示範如何在 zoned_time 下午 4:45 建立時區 "Antarctica/Casey"的實例,於 2021/9/15:

// 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;

傳回值

sys_info,其中包含時區和時間的UTC位移、日光節約時間調整位移等等。

範例: 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

local_time<duration>取得 ,表示指定這個 zoned_time時區和時間點的當地時間。

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

取得 儲存在 中 zoned_time 的時間 system_clock

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_timelocal_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
zoned_time要指定指定其中this一個的 。

st
sys_time要指定給time_point儲存zoned_time這個 中之 。

lt
local_time要指定給time_point儲存zoned_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) 指定這個sttime_pointzoned_time中的 。 指定之後, *this->get_sys_time() == st; 3) 會轉換local_timesys_timelt 。 它基本上會做為 timeZone->to_sys(lt),並將結果指派給這個 zoned_time中的 [time_point] 。 指派之後, *this->get_local_time() == lt;

operator local_time

結合 zoned_time的時區與預存時間點,以在該時區產生當地時間。

explicit operator local_time<duration>() const;

傳回值

time_point<local_t, Duration>,表示這個 zoned_time中時區的當地時間。 您可以使用便利別名 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 結構
標頭文件參考