根据时区和时间创建 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_time
或 local_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)。这使得设置国际视频会议变得得心应手(例如)。
我有一个柏拉图意义上的日期时间,即某个日期和时间(比如 2022 年 1 月 18 日 15:15:00),我知道它代表哪个时区,例如“Europe/Moscow”。 =15=]
我想创建std::chrono::zoned_time
。有可能吗?
我查看了 the constructors,似乎所有这些都需要 sys_time
或 local_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)。这使得设置国际视频会议变得得心应手(例如)。