gpt4 book ai didi

c++ - 当我尝试使用 sstream 和 facet 将 Boost Time_duration 转换为字符串时,我没有得到所需的格式

转载 作者:行者123 更新时间:2023-11-30 04:55:22 26 4
gpt4 key购买 nike

我正在尝试将 boost::posix_time::time_duration 对象转换为 "%H%M"形式的 string。问题是对话是不工作就好像它不存在一样。

  • 我用来将 Duration 转换为字符串的函数是 convert_duration_to_string

我也尝试过这种方式,如下面的函数所示。它可以解决问题。但它太丑了。假设将来我们必须更改日期格式。在这种情况下,我们也必须更改函数内的代码。

std::string convert_duration_to_string(Duration duration) {
std::ostringstream os;
os << std::setfill('0') << std::setw(2) << duration.hours()
<< std::setfill('0') << std::setw(2) << duration.minutes();
return os.str();
}

#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include "boost/date_time/gregorian/gregorian.hpp"

#include <iostream>
#include <sstream>

typedef boost::posix_time::time_duration Duration;

boost::posix_time::ptime parse_time_object(const std::string &time,
const std::string &format) {
std::stringstream ss;
ss << time.c_str();
ss.imbue(std::locale(
std::locale::classic(),
new boost::local_time::local_time_input_facet(format.c_str())));
boost::posix_time::ptime time_object;
ss >> time_object;

return time_object;
}


std::string convert_duration_to_string(Duration duration,
const std::string &format) {
std::ostringstream os;
os.imbue(std::locale(std::locale::classic(),
new boost::posix_time::time_facet(format.c_str())));
os << duration;
return os.str();
}


int main (){
Duration duration = parse_time_object("0740", "%H%M").time_of_day();
//[...] PLENTY OF THINGS CAN HAPPEN IN HERE THE DATE CAN GO through A
// WHOLE PIPELINE AND COME BACK
std::cout << convert_duration_to_string(duration,"%H%M") << std::endl; //Should Pring 0740. instead it is printing 07:40:00
return 0;
}

最佳答案

您正在输出持续时间,因此您需要更改持续时间格式。仅使用默认持续时间格式创建时间面是不够的。 IOW 像这样修改你的代码......:

std::string convert_duration_to_string(Duration           duration,
const std::string &format) {
std::ostringstream os;
auto f = new boost::posix_time::time_facet(format.c_str());
f->time_duration_format(format.c_str());
os.imbue(std::locale(std::locale::classic(), f));
os << duration;
return os.str();
}

...似乎work .

关于c++ - 当我尝试使用 sstream 和 facet 将 Boost Time_duration 转换为字符串时,我没有得到所需的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53082456/

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