提问人:Miro Kropacek 提问时间:11/13/2023 更新时间:11/13/2023 访问量:41
从区域创建 std::chrono::zoned_time,从函数参数创建时间
Create std::chrono::zoned_time from zone and time from function parameters
问:
我正要问最初的问题(从区域和时间创建 std::chrono::zoned_time),幸运的是我没花很长时间就找到了它。
这个公认的答案近乎完美,但是,即使经过一个小时的盯着 cppreference.com 和谷歌搜索,我也无法找到一个简单的例子来做到这一点,但以编程方式,即类似
std::chrono::zoned_time get_zt(const std::string& location, int year, int month, int day, int hour, int minutes, int seconds);
我也会接受
std::chrono::zoned_time get_zt(const std::string& location, const std::string& time_str);
如果它不使用 OR(它们似乎在我的 G++ 中仍然缺失)。std::chrono::parse
std::chrono::from_stream
目标仍然是一样的——能够指定非本地时区和时间,然后使用它(例如,“如果他们的本地时间是酒吧,那么自纪元以来在时区 foo 中经过了多少秒?
答:
3赞
Ted Lyngmo
11/13/2023
#1
我认为这就是你所追求的:
auto get_zt(const std::string& location, int year, int month, int day, int hour,
int minutes, int seconds) {
auto ymd = std::chrono::year(year) / std::chrono::month(month) /
std::chrono::day(day);
auto ld = std::chrono::local_days{ymd} + std::chrono::hours(hour) +
std::chrono::minutes(minutes) + std::chrono::seconds(seconds);
std::chrono::zoned_time zt{location, ld};
return zt;
}
用法示例:
int main() {
auto lzt = get_zt("Europe/Stockholm", 2023, 11, 12, 22, 19, 44);
std::cout << lzt << '\n';
}
输出:
2023-11-12 22:19:44 CET
评论
1赞
Miro Kropacek
11/14/2023
确实,工作是一种享受。就像我所希望的那样简单。
评论