从区域和时间创建 std::chrono::zoned_time

Ria*_*iaD 3 c++ timezone c++-chrono

我有一个柏拉图意义上的日期时间,即某个日期和时间(例如 2022 年 1 月 18 日 15:15:00),并且我知道它代表哪个时区,例如“欧洲/莫斯科”

我想创造std::chrono::zoned_time. 有可能吗?我查看了构造函数,似乎它们都需要sys_time或者local_time不是我所拥有的。

我错过了一些明显的东西吗?

How*_*ant 5

#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';
}
Run Code Online (Sandbox Code Playgroud)

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

上面的程序打印出:

2022-01-18 15:15:00 MSK
Run Code Online (Sandbox Code Playgroud)

所以你可以将其视为恒等函数。但实际上,您也可以使用 来获取 UTCzt时间.get_sys_time()。您还可以使用zt作为“时间点”来构造另一个zoned_time

std::chrono::zoned_time zt2{"America/New_York", zt};
std::cout << zt2 << '\n';
Run Code Online (Sandbox Code Playgroud)

输出:

2022-01-18 07:15:00 EST
Run Code Online (Sandbox Code Playgroud)

zt2将具有与 相同的sys_time(UTC) zt。这使得建立国际视频会议变得很方便(例如)。