C++ :如何从 JSON 获取长整型值并将其转换为 time_point

C++ : how to get a long value from json and convert it to time_point

本文关键字:转换 time point JSON 长整型 获取 C++      更新时间:2023-10-16

我对 c++ 很陌生,所以我有一堆问题,但现在这个问题让我发疯:

我已经没有 json 响应并希望解析一个对象(因为它是一个时间戳)。之后,我希望 tp 解析那么长的时间到一个time_point对象

chrono::system_clock::from_time_t(...);

所以这就是我现在得到的:

auto last_change_date_long = (long long)json_troubleticket["lastChangeDate"].int_value();
time_t last_change_date_raw = time_t(last_change_date_long);
auto last_change_date = chrono::system_clock::from_time_t(last_change_date_raw);

它可以编译,但是如果我运行它(虽然我知道lastChangeDate的值是1480702672000),它的结果是 2147483647000......

有人建议出了什么问题吗?

这将做到这一点:

auto i = 1480702672000;
std::chrono::system_clock::time_point tp{std::chrono::milliseconds{i}};

请注意,上述内容不能保证按标准工作,因为未指定system_clock纪元。 然而,所有实现目前都在使用Unix Time,我与实现者有一个非正式的协议,在我尝试标准化这个现有实践时,他们不会偏离这一点。

看到您拥有的行为的原因是您的 json 自 1970-01-01 00:00:00 UTC 以来计算毫秒数,但time_t通常计算秒数(尽管标准也没有指定)。 因此,在从last_change_date_long创建last_change_date_raw时,您将隐式地将毫秒转换为秒。 这将导致日期在 48891 年中间。 from_time_t的实现可能会对此感到害怕(溢出)。

Fwiw,这个特定的时间点代表:

2016-12-02 18:17:52.000 UTC