假设我有以下代码:
#include <boost/date_time.hpp>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
boost::local_time::local_time_facet* facet = new boost::local_time::local_time_facet("%e %b %Y %T %q");
std::ostringstream date_osstr;
date_osstr.imbue(std::locale(date_osstr.getloc(), facet));
const boost::posix_time::ptime& now = boost::posix_time::second_clock::local_time();
date_osstr << now;
std::cout << date_osstr.str() << '\n';
}
我预计输出应该具有以下格式:
2003年7月1日10:52:37 +0200
但输出格式如下:
2014-Apr-28 12:40:04
为什么呢?我究竟做错了什么?我该如何解决?
答案 0 :(得分:3)
您需要实际使用local_date_time
才能从local_time_facet
:
#include <boost/date_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>
#include <iostream>
#include <locale>
#include <sstream>
using namespace boost;
static local_time::time_zone_ptr const utc_time_zone(new local_time::posix_time_zone("GMT"));
int main()
{
local_time::local_time_facet* facet = new local_time::local_time_facet("%e %b %Y %T %q");
posix_time::ptime my_ptime = posix_time::second_clock::universal_time();
local_time::local_date_time now(my_ptime, utc_time_zone);
std::ostringstream date_osstr;
date_osstr.imbue(std::locale(date_osstr.getloc(), facet));
date_osstr << now;
std::cout << date_osstr.str() << '\n';
}
打印
28 Apr 2014 12:59:01 +0000
答案 1 :(得分:2)
您正在使用的方面是local_time对象,但您正在打印posix_time。相反,使用这个:
boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%e %b %Y %T %q");