A zoned_time
是一对 time_zone
和一 time_point
对。 它在特定时区内具有 time_point
意义。
语法
template<class Duration, class TimeZonePtr = const time_zone*>
class zoned_time ; // C++20
注解
始终 zoned_time
引用有效的时区,并表示存在且在该时区中不明确的时间点。
成员
名称 | DESCRIPTION |
---|---|
构造 函数 | 构造一个 zoned_time 。 |
get_info |
使用此时区 zoned_time 获取有关时间点 zoned_time 的信息。 |
get_local_time |
将时区 zoned_time 与存储的时间点组合在一起,以在该时区中生成本地时间。 |
get_sys_time |
获取存储在此 zoned_time 中而不应用时区的时间点。 |
get_time_zone |
获取存储在此中的zoned_time 。 |
operator= |
将另一个或另一个值或另一个zoned_time zoned_time 值local_time sys_time 分配给此zoned_time 值。 |
operator local_time |
将 zoned_time 's 时区与存储的时间点组合在一起,以在该时区中生成本地时间。 |
operator sys_time |
获取存储在此 zoned_time 中而不应用时区的时间。 |
非成员
名称 | DESCRIPTION |
---|---|
operator== |
确定两个 zoned_time 实例是否相等。 |
operator<< |
向给定流输出 a zoned_time 。 |
便利类型别名
名称 | DESCRIPTION |
---|---|
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 及更高版本。
Namespace: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
指示在转换为 a local_time
sys_time
时如何处理不明确或不存在的本地时间。 有关详细信息,请参阅 choose
枚举。
name
时区的名称。
st
具有指定持续时间的 A sys_time
。 用于设置时间。
tp
具有指定持续时间的 A local_time
。 用于设置时间。
y
zoned_time
已复制以构造新的 zoned_time
。
z
time_zone
一std::move(z)
个 'd 到构造zoned_time
中。
zt
一个 zoned_time
指针, std::move(zt)
'd 到构造 zoned_time
的 。
注解
1) 用 traits::default_zone()
默认构造时间点初始化时区。
2) 默认复制构造函数。
3) 用 std::move(z)
默认构造时间点初始化时区。
4) 使用和时间traits::default_zone()
初始化时区st
。
5) 使用 traits::locate_zone(name)
默认构造时间点初始化时区。
6) 使用
7) 用 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
下面演示如何在 2021 年 9 月 15 日下午 4:45 为时区zoned_time
创建"Antarctica/Casey"
实例:
// 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 偏移量、夏令时调整偏移量等的 A 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
获取一个 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;
返回值
示例: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
个 's 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) 将 (alt
) 转换为local_time
一个sys_time
。 它实质上timeZone->to_sys(lt)
执行此作,并将结果分配给此time_point
中的 [zoned_time
] 。 工作分配后, *this->get_local_time() == lt;
operator local_time
将 zoned_time
's 时区与存储的时间点组合在一起,以在该时区中生成本地时间。
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