gpt4 book ai didi

c++ - 以毫秒为单位解析字符串到 boost::posix_time::ptime

转载 作者:行者123 更新时间:2023-12-01 14:47:00 30 4
gpt4 key购买 nike

我有一组函数,允许我根据特定格式将 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 库( issue )上的一个错误
为了解决它,我只需将所有出现的 ".%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;
}

关于c++ - 以毫秒为单位解析字符串到 boost::posix_time::ptime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63597974/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com