我对 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