c++ 从zone创建std::chrono::zoned_time,从函数参数创建time

kmbjn2e3  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(88)

我正要问原来的问题(Create std::chrono::zoned_time from zone and 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);


如果它不使用std::chrono::parsestd::chrono::from_stream(它们似乎在我的g++中仍然缺失)。
目标仍然是相同的--能够指定非本地时区 * 和 * 时间,然后使用它(例如,“如果 * 他们的 * 本地时间是bar,那么在时区foo中,纪元已经过去了多少秒?”)

3wabscal

3wabscal1#

我想这就是你想要的:

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

相关问题