提升格里高利日期格式会产生错误的结果

时间:2016-03-15 03:18:28

标签: c++ boost

这是我的代码。我期望输出“2016-03-15”。 但是在我的Ubuntu 14.04代码输出“2016-Mar-15”,g ++(Ubuntu 4.8.4-2ubuntu1~14.04.1)4.8.4,eclipse调试环境。

2016-Mar-15

Build&运行,结果是

{{1}}

我想知道结果......与语言环境有什么关系吗?

1 个答案:

答案 0 :(得分:2)

谢谢你。所有。我解决了! 这是我的错。为了每个人的知识 我留下我的答案:) 我喜欢Stackoverflow!

using namespace boost::gregorian;
using namespace boost::local_time;
using namespace boost::posix_time;

date current_date(boost::gregorian::day_clock::local_day());
date_duration dd(offset);
date offset_date = current_date - dd;

这是对的。我应该使用“date_facet”而不是“time_facet”

auto facet = new boost::gregorian::date_facet();
std::stringstream ss;
facet->format("%Y-%m-%d");
ss.imbue(std::locale(locale::classic(), facet));
ss << offset_date;
std::cerr << ss.str() << std::endl; // output : 2016-03-15

这是错误的。我不应该使用“time_facet”

auto facet2 = new boost::posix_time::time_facet();
std::stringstream ss2;
facet->format("%Y-%m-%d");
ss2.imbue(std::locale(locale::classic(), facet2));
ss2 << offset_date;
std::cerr << ss2.str() << std::endl;  // output : 2016-Mar-15