![](/img/trans.png)
[英]create a boost::posix_time::ptime instance for X number of milliseconds
[英]Parsing string to boost::posix_time::ptime with milliseconds
我有一组函数,允许我根据特定格式将 ptime 转换为字符串并将字符串转换为 ptime。 这很好用,直到我需要使用毫秒修饰符(%f)。
转换为 String 工作正常:
std::string strFormat = "%Y-%m-%d %H:%M:%S.%f";
ptime now = microsec_clock::universal_time();
auto str = ToString(strFormat, now);
将输出:2020-08-26 12:27:54.938943
但相反:
auto pt = FromString(strFormat, str);
std::cout << to_simple_string(pt) << std::endl;
将输出:not-a-date-time
FromString
函数使用 time_input_facet :
boost::posix_time::ptime ptime;
boost::posix_time::time_input_facet* infacet = new boost::posix_time::time_input_facet(informat.c_str());
std::stringstream ss;
ss.imbue(std::locale(ss.getloc(), infacet));
ss.str(time);
ss >> ptime;
return ptime;
正如您所看到的, Live On Coliru删除 %f 修饰符工作正常。
我错过了什么? 我尝试了不同的格式但没有成功。 使用 boost 1.70
编辑:正如@sugar 在评论中指定的那样,使用 %F 而不是 %f 似乎可以双向工作。 不应该使用 %f 吗?
事实证明,这是 Boost date_time 库(问题)上的一个错误
为了解决它,我只需将所有出现的 ".%f" 替换为 "%F" :
boost::posix_time::ptime FromString(std::string informat, std::string time)
{
boost::replace_all(informat, ".%f", "%F"); // Get around #102
boost::posix_time::ptime ptime;
boost::posix_time::time_input_facet* infacet = new boost::posix_time::time_input_facet(informat.c_str());
std::stringstream ss;
ss.imbue(std::locale(ss.getloc(), infacet));
ss.str(time);
ss >> ptime;
return ptime;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.