在C ++中将日期转换为以毫秒为单位的时间?

时间:2016-03-16 13:56:57

标签: c++ datetime boost posix

我有一个要求,我必须将日期时间格式的给定字符串转换为epoch的毫秒数。 在Javascript中有时间转换api,但在c ++中我找不到任何东西。

输入看起来像'2016-Mar-15 09:23:58.665068'

输出应以毫秒为单位,例如14520000785。

我已经尝试过调查boost但仍然无法找到(或了解)该怎么办? 此外,通过谷歌我发现反过来,即转换毫秒到日期格式,但不是我需要的,也没有任何有用的帖子。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

仅使用标准库功能:

#include <ctime>
#include <chrono>
#include <iostream>

int main()
{
    std::tm tm = {};
    const char* snext = ::strptime("2016-Mar-15 09:23:58.665068", "%Y-%b-%d %H:%M:%S", &tm);
    auto time_point = std::chrono::system_clock::from_time_t(std::mktime(&tm));
    long long  duration_ms = time_point.time_since_epoch() / std::chrono::milliseconds(1) + std::atof(snext) * 1000.0f;
    std::cout << duration_ms << std::endl;
}

打印:1458033838665

请参阅std::chrono::system_clock::nowstd::chrono::milliseconds

答案 1 :(得分:2)

最简单的就是拼出来:

auto pt = boost::lexical_cast<ptime>("2016-Mar-15 09:23:58.665068");
std::cout << (pt - ptime { {1970,0,0}, {} }).total_milliseconds();

<强> Live On Coliru

#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
#include <boost/date_time.hpp>
#include <sstream>

int main() {
    using boost::posix_time::ptime;

    ptime pt;
    { 
        std::istringstream iss("2016-Mar-15 09:23:58.665068");
        auto* f = new boost::posix_time::time_input_facet("%Y-%b-%d %H:%M:%S%f");

        std::locale loc(std::locale(""), f);
        iss.imbue(loc);
        iss >> pt;
    }

    std::cout << pt << " " << (pt - ptime{{1970,1,1},{}}).total_milliseconds();
}

打印

2016-Mar-15 09:23:58.665068 1458033838665

当然,在辅助函数中提取解析。保持语言环境以便重复使用等。