zoned_time

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_timelocal_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_zonestd::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_timesystem_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的指针。

示例: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_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_pointtime_zone指针从另一个zoned_time副本复制到此zoned_time副本中。 2) 分配给sttime_pointzoned_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

另请参阅

<chrono>
time_point
time_zone
zoned_traits 结构
头文件参考