提升日期时间 - 输出格式

时间:2014-04-28 12:46:37

标签: c++ boost

假设我有以下代码:

#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

为什么呢?我究竟做错了什么?我该如何解决?

2 个答案:

答案 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

查看 Live On Coliru

答案 1 :(得分:2)

您正在使用的方面是local_time对象,但您正在打印posix_time。相反,使用这个:

boost::posix_time::time_facet* facet = new boost::posix_time::time_facet("%e %b %Y %T %q");