将日期转换为毫秒,在c ++中?

问题描述 投票:3回答:2

我有一个要求,我必须将日期时间格式的给定字符串转换为从纪元开始的毫秒数。在Javascript中有日期到时间转换api,但是在c ++中我找不到类似的东西。

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

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

我曾尝试研究增强功能,但仍然找不到(或不明白)该怎么做?另外,通过Google,我发现存在另一种方式,即将毫秒转换为日期格式,但不是我需要的格式,也没有任何有用的帖子。

任何帮助将不胜感激。

c++ datetime boost posix
2个回答
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

当然,可以在辅助函数中提取解析。保留语言环境以供重用,等等。


3
投票

仅使用标准库功能:

© www.soinside.com 2019 - 2024. All rights reserved.