zoned_time
類別
zoned_time
是和time_point
的time_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_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== |
判斷兩個 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_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
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) 指定這個st
time_point
zoned_time
中的 。 指定之後, *this->get_sys_time() == st;
3) 會轉換local_time
sys_time
為 lt
。 它基本上會做為 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