我必须将boost::posix_time::ptime
变量序列化为字符串。我想要的格式是:2014-05-12T16:14:01.809+0200
。我无法更改它,因为它是从Web服务请求的,我必须遵守所请求的格式。
我可以暗示时区是本地时区。
我看到了一些例子,但我没有找到任何让我从UTC ptime获得std::string
的东西。
添加了我想要的一些细节:
我从boost::posix_time::ptime
开始。我想以我之前指定的格式打印它,但我不知道我的实际时区是什么。我必须通过库函数调用找到它。
那么我要做的就是用这个原型编写一个函数:std::string time_to_custom_string(boost::posix_time::ptime datetime);
答案 0 :(得分:0)
如果你不介意一些尾随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));
}