c++ - boost::posix_time::time_facet 和 boost::posix_time::time_input_facet 之间的“%f”行为不一致
问题描述
我正在尝试将 a 转换boost::posix_time::ptime
为特定的字符串格式(扩展 ISO),然后再转换回boost::posix_time::ptime
.
boost::posix_time::time_facet
%f
令人惊讶的是,它看起来像是 for 000000
(999999
没有小数分隔符)。但是对于boost::posix_time::time_input_facet
,它的意思.000000
是.999999
(带小数点分隔符)。
看:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iostream>
int main( int argc, char** argv )
{
auto now = boost::posix_time::second_clock::local_time();
std::stringstream outStr;
{
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet();
facet->format("%Y-%m-%dT%H:%M:%S.%f");
outStr.imbue(std::locale(std::locale::classic(), facet));
outStr << now;
}
std::cout << outStr.str() << std::endl;
{
static const std::string format = "%Y-%m-%dT%H:%M:%S.%f";
const std::locale loc = std::locale(std::locale::classic(), new boost::posix_time::time_input_facet(format));
std::istringstream is(outStr.str());
is.imbue(loc);
boost::posix_time::ptime converted;
is >> converted;
std::cout << converted << std::endl;
}
{
static const std::string format = "%Y-%m-%dT%H:%M:%S%f";
const std::locale loc = std::locale(std::locale::classic(), new boost::posix_time::time_input_facet(format));
std::istringstream is(outStr.str());
is.imbue(loc);
boost::posix_time::ptime converted;
is >> converted;
std::cout << converted << std::endl;
}
return 0;
}
这输出:
2019-04-30T12:23:29.000000
not-a-date-time
2019-Apr-30 12:23:29
虽然我期望:
2019-04-30T12:23:29.000000
2019-Apr-30 12:23:29
not-a-date-time
我正在使用提升 1.68。
我做错了什么还是 or 中的boost::posix_time::time_facet
错误boost::posix_time::input_time_facet
?
注意:'%F' 没有这个问题。
解决方案
这绝对是一个提升错误。我在这里填写问题: https ://github.com/boostorg/date_time/issues/102
如果时间没有十进制信息,使用%F
效果更好,但行为不同:
试试这个
推荐阅读
- asp.net - 仍然建议使用 DotNetOpenAuth NuGet 包来构建 .NET OAUTH2 授权服务器?
- spring - Spring批处理元数据表的意义
- java - 为什么我无法从 servlet 接收列表?
- mysql - SQL - 修改记录以获取一列中季度的总余额,即使对于 SQL 中的特定季度也是如此
- laravel - 如何在 Laravel 中加入多个表?
- python - 如何让 Sympy 解析表达式,同时仅将任意先前定义的字符串视为符号?
- python - 未知:无异常迭代请求!尝试在 Dialogflow 中检测意图时
- python - sklearn中DecisionTreeRegressor的自定义标准
- c# - 在一个多行正则表达式中匹配多个不同的行首和行尾
- .net-core - 比较两个字符串列表的函数