8

我有一个像2013-05-29T21:19:48Z. 我想将它转换为自 1970 年 1 月 1 日(UNIX 纪元)以来的秒数,这样我就可以只使用 4 个字节(或者可能是 5 个字节,以避免 2038 年的问题)来保存它。我怎样才能以便携的方式做到这一点?(我的代码必须同时在 Linux 和 Windows 上运行。)

我可以从字符串中获取日期部分,但我不知道如何计算秒数。我尝试查看C++ 中日期和时间实用程序的文档,但没有找到任何东西。

4

4 回答 4

4

如果您想要 c++ 方式,请使用std::get_time - 但其他两个选项也有效。strptime 将忽略最后的 Z - 并且 T 可以通过格式字符串容纳%Y-%m-%dT%H:%M:%s- 但您也可以将 Z 放在最后。

于 2013-07-16T20:20:09.183 回答
4

这是工作代码

string s{"2019-08-22T10:55:23.000Z"};
std::tm t{};
std::istringstream ss(s);

ss >> std::get_time(&t, "%Y-%m-%dT%H:%M:%S");
if (ss.fail()) {
    throw std::runtime_error{"failed to parse time string"};
}   
std::time_t time_stamp = mktime(&t);
于 2019-08-23T12:43:16.507 回答
1

看看strptime()。有关 Windows 替代方案,请参阅此问题

于 2013-07-16T16:07:31.270 回答
0

您可以使用boost date_time or more specific ptime

用于ptime time_from_string(std::string)初始化您的时间并long total_seconds()获取持续时间的秒数。

于 2013-07-16T16:19:04.497 回答