C++ :如何从 JSON 获取长整型值并将其转换为 time_point
C++ : how to get a long value from json and convert it to time_point
我对 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
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何将 time-uuid(存储在 boost uuid 中)转换为时间戳/自纪元以来的时间?
- c/在Unix时间和"Gregorian time"之间转换
- 在 boost::p osix_time::p time 和 mongo::D ate_t 之间转换
- srand(time(null))导致编译器警告:隐式转换会丢失整数精度
- 使用自定义时区将 boost::p osix_time::p time 转换为字符串