我无法尝试如何让Boost将日期/时间对象格式化为字符串。我正在尝试设置格式说明符,但它会被忽略并继续以预定义的样式输出日期。
通过演示解释可能更容易,因此这里有一些示例代码显示问题:
#include <boost/date_time.hpp>
#include <iostream>
int main(void)
{
int i = 1485324852;
boost::posix_time::ptime pt = boost::posix_time::from_time_t(i);
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
output_facet->format("%d/%m/%Y %H:%M");
std::stringstream ss;
ss.imbue(std::locale(std::locale::classic(), output_facet));
ss << pt;
std::string strTime = ss.str();
std::cout << "Time " << i << " converted to UI string: " << strTime << "\n";
return 0;
}
它给了我这个输出:
Time 1485324852 converted to UI string: 2017-Jan-25 06:14:12
我的期望是:
Time 1485324852 converted to UI string: 25/01/2017 16:14
我告诉output_facet
根据example given in the Boost docs使用%d/%m/%Y %H:%M
格式说明符,但这被忽略了。
我无法看到设置格式出错的地方。这可能是显而易见的,有人能够向我指出吗?
答案 0 :(得分:2)
我认为您正在混合local_date
和posix_time
。
在代码末尾添加可以解决您的问题并打印所需的格式:
boost::local_time::local_date_time ldt(boost::local_time::not_a_date_time);
ss >> ldt;
ss.str("");
ss << ldt;
std::cout << ss.str() << std::endl;
尽管如此,如果您想使用posix_time
打印所需的格式,则需要更改:
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
为:
boost::posix_time::time_facet *output_facet = new boost::posix_time::time_facet();
答案 1 :(得分:1)
好的,我转载了它,我无法用你的代码获得正确的输出。
这是片段,可以给出正确的输出。我看到的唯一区别是local_time_facet
与time_facet
。
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
using namespace boost::posix_time;
using namespace std;
int main(int argc, char **argv) {
boost::posix_time::ptime now = boost::posix_time::from_time_t(123456789);
time_facet *facet = new time_facet("%d/%b/%Y %H:%M:%S");
cout.imbue(locale(cout.getloc(), facet));
cout << now << endl;
}