根据时区和时间创建 std::chrono::zoned_time

Create std::chrono::zoned_time from zone and time

我有一个柏拉图意义上的日期时间,即某个日期和时间(比如 2022 年 1 月 18 日 15:15:00),我知道它代表哪个时区,例如“Europe/Moscow”。 =15=]

我想创建std::chrono::zoned_time。有可能吗? 我查看了 the constructors,似乎所有这些都需要 sys_timelocal_time,但我没有。

我是不是遗漏了什么明显的东西?

#include <chrono>
#include <iostream>

int
main()
{
    using namespace std::literals;
    std::chrono::zoned_time zt{"Europe/Moscow",
        std::chrono::local_days{18d/std::chrono::January/2022} + 15h + 15min};
    std::cout << zt << '\n';
}

local_time 不一定是计算机的本地时间。它是 a 本地时间,尚未与时区相关联。当您构建 zoned_time 时,您将本地时间与时区相关联。

以上程序打印出来:

2022-01-18 15:15:00 MSK

所以你可以把它看作恒等函数。但实际上你也可以使用 .get_sys_time()zt 中获取 UTC 时间。而你也可以以zt为“时间点”构造另一个zoned_time:

std::chrono::zoned_time zt2{"America/New_York", zt};
std::cout << zt2 << '\n';

输出:

2022-01-18 07:15:00 EST

zt2 将具有与 zt 相同的 sys_time (UTC)。这使得设置国际视频会议变得得心应手(例如)。