gpt4 book ai didi

c++ - 使用自定义格式序列化 boost ptime

转载 作者:太空宇宙 更新时间:2023-11-04 13:48:31 25 4
gpt4 key购买 nike

我必须将一个 boost::posix_time::ptime 变量序列化为一个字符串。我想要的格式是这样的:2014-05-12T16:14:01.809+0200。我无法更改它,因为它是从 Web 服务请求的,我必须遵守请求的格式。我可以暗示时区是本地时区。我看到了一些例子,但我没有找到任何让我从 UTC ptime 得到 std::string 的东西。

添加了一些关于我想要的细节:我从 boost::posix_time::ptime 开始。我想以我之前指定的格式打印它,但我不知道我的实时时区是多少。我必须通过库函数调用找到它。然后我要做的就是用这个原型(prototype)写一个函数:std::string time_to_custom_string(boost::posix_time::ptime datetime);

最佳答案

如果您不介意尾随 000 和小数秒:

#include <boost/date_time/local_time/local_time.hpp>
#include <locale>

static boost::local_time::time_zone_ptr const s_timezone(new boost::local_time::posix_time_zone("+02:00"));

std::string mydateformat(boost::local_time::local_date_time const& ldt)
{
using namespace boost;
std::ostringstream ss;

boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));
output_facet->format("%Y-%m-%dT%H:%M:%s%q");

ss.str("");
ss << ldt;
return ss.str();
}

std::string mydateformat()
{
using namespace boost;

posix_time::ptime my_ptime = posix_time::second_clock::universal_time();
local_time::local_date_time ldt(my_ptime, s_timezone);

return mydateformat(ldt);
}

int main()
{
using namespace boost;

gregorian::date d(2014, 5, 12);
posix_time::time_duration td(16, 14, 1, 809000);
local_time::local_date_time ldt(d, td, s_timezone, false/*daylight savings*/);

std::cout << mydateformat(ldt) << "\n";
assert("2014-05-12T16:14:01.809000+0200" == mydateformat(ldt));
}

关于c++ - 使用自定义格式序列化 boost ptime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24585398/

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