gpt4 book ai didi

c++ - boost::posix_time::time_facet 和 boost::posix_time::time_input_facet 之间的不一致 '%f' 行为

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:12 27 4
gpt4 key购买 nike

我正在尝试将 boost::posix_time::ptime 转换为特定的字符串格式(扩展 ISO),然后再转换回 boost::posix_time::ptime.

令人惊讶的是,它看起来像对于 boost::posix_time::time_facet %f 意味着 000000999999 (没有小数分隔符)。但是对于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;
}

This outputs :

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

我正在使用 boost 1.68。

我做错了什么还是 boost::posix_time::time_facetboost::posix_time::input_time_facet 中的错误?

注意:'%F'没有这个问题。

最佳答案

这绝对是一个 boost 错误。我在这里填写问题: https://github.com/boostorg/date_time/issues/102

使用 %F 效果更好,但如果时间没有小数信息,则有不同的行为: Try this

关于c++ - boost::posix_time::time_facet 和 boost::posix_time::time_input_facet 之间的不一致 '%f' 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55918945/

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