将字符串时间转换为UNIX时间戳

时间:2013-07-16 15:58:39

标签: c++ unix-timestamp

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

我可以从字符串中获取日期部分,但我不知道如何计算秒数。我试着看documentation of date and time utilities in C++,但我没找到任何东西。

4 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

看看strptime()。有关Windows的替代方案,请参阅this question

答案 2 :(得分:1)

您可以使用boost date_time更具体的ptime。 我看到的唯一问题是字符串中的TZ

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

答案 3 :(得分:0)

这是工作代码

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);