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_timezoned_time值local_timesys_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_timesys_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_pointtime_zone指针从另一个zoned_time副本复制到此zoned_time副本中。
2) 分配给sttime_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