在 C++ 中将日期转换为以毫秒为单位的时间?
convert Date to time in millisecond in c++?
我有一个要求,我必须将给定的日期时间格式的字符串转换为从纪元开始的毫秒数。
在 Javascript 中有日期到时间的转换 api 但在 c++ 中我找不到这样的东西。
输入看起来像'2016-Mar-15 09:23:58.665068'
输出应该以毫秒为单位,例如 14520000785。
我已经尝试研究 boost,但仍然找不到(或不明白)该怎么做?
此外,通过 google 我发现了另一种方法,即将毫秒转换为日期格式,但不是我需要的,也没有任何有用的 post。
任何帮助将不胜感激。
最直接的方法就是拼写出来:
auto pt = boost::lexical_cast<ptime>("2016-Mar-15 09:23:58.665068");
std::cout << (pt - ptime { {1970,0,0}, {} }).total_milliseconds();
#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
当然,提取辅助函数中的解析。保留语言环境以供重用等。
仅使用标准库功能:
#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::now
and std::chrono::milliseconds
。
我有一个要求,我必须将给定的日期时间格式的字符串转换为从纪元开始的毫秒数。 在 Javascript 中有日期到时间的转换 api 但在 c++ 中我找不到这样的东西。
输入看起来像'2016-Mar-15 09:23:58.665068'
输出应该以毫秒为单位,例如 14520000785。
我已经尝试研究 boost,但仍然找不到(或不明白)该怎么做? 此外,通过 google 我发现了另一种方法,即将毫秒转换为日期格式,但不是我需要的,也没有任何有用的 post。
任何帮助将不胜感激。
最直接的方法就是拼写出来:
auto pt = boost::lexical_cast<ptime>("2016-Mar-15 09:23:58.665068");
std::cout << (pt - ptime { {1970,0,0}, {} }).total_milliseconds();
#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
当然,提取辅助函数中的解析。保留语言环境以供重用等。
仅使用标准库功能:
#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::now
and std::chrono::milliseconds
。