gpt4 book ai didi

c++ - 从编译时已知的日历日期创建 `std::chrono::time_point`

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:12 29 4
gpt4 key购买 nike

This答案显示了如何将字符串解析为 std::chrono::time_point,如下所示:

std::tm tm = {};
std::stringstream ss("Jan 9 2014 12:35:34");
ss >> std::get_time(&tm, "%b %d %Y %H:%M:%S");
auto tp = std::chrono::system_clock::from_time_t(std::mktime(&tm));

如果我想从一个(公历)日历日期创建一个std::chrono::time_point,其年、月和日在编译时已知,是否有任何比上面建议的从字符串解析它更简单的方法?

最佳答案

是的,您可以在编译时完成整个计算,使用 Howard Hinnant's date/time library 创建一个 constexpr system_clock::time_point .

#include "date/date.h"
#include <chrono>

int
main()
{
using namespace date;
using namespace std::chrono;
constexpr system_clock::time_point tp = sys_days{January/9/2014} + 12h + 35min + 34s;
static_assert(tp == system_clock::time_point{1389270934s}, "");
}

这是假设日期/时间是 UTC。如果不是,则必须手动添加/减去 UTC 偏移量才能实现。由于政客们总是一时兴起改变时区规则,因此使它们成为 constexpr 的希望很小。当误解出现时,甚至历史时区规则也会更新。

此外,此程序将通过删除 #include "date/date.h"using namespace date; 移植到 C++20。同时使用 Howard Hinnant's date/time library需要 C++14 constexpr 肌肉。 C++11 constexpr 是不够的(但您可以在运行时完成,删除 constexprstatic_assert)。

关于c++ - 从编译时已知的日历日期创建 `std::chrono::time_point`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238978/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com