如何从输出流创建std :: string?

时间:2017-07-09 14:25:10

标签: c++ stdstring

原谅这个简单的问题,但我已经在这里待了好几个小时,没有成功。我试图实现一个功能:

std::string make_date_string()

我正在使用Howard Hinnant的日期库,这可以让我做这样的事情:

cout << floor<days>(system_clock::now());
打印类似的东西:

2017-07-09

我试图找出如何将输出转换为std :: string,这样我就能从函数中返回它,但我无处可去。

2 个答案:

答案 0 :(得分:6)

  

我正在试图弄清楚如何将输出转换为std :: string,这样我就能从函数中返回它,但我无处可去。

在这种情况下,您可以使用std::ostringstream

std::ostringstream oss;
oss << floor<days>(system_clock::now());
std::string time = oss.str();

作为旁注:

因为它看起来像你的助手功能

template<typename Fmt>
floor(std::chrono::timepoint);

iostream manipulator实施,可与任何std::ostream实施一起使用。

答案 1 :(得分:3)

接受的答案是一个很好的答案(我已经投了赞成票)。

以下是替代配方using the same library

#include "date.h"
#include <string>

std::string
make_date_string()
{
    return date::format("%F", std::chrono::system_clock::now());
}

创建std::string格式的"2017-07-09"。这个特殊的表达方式非常好,因为您不必显式构造std::ostringstream,并且您可以轻松地将格式更改为您喜欢的格式,例如:

    return date::format("%m/%d/%Y", std::chrono::system_clock::now());

现在返回"07/09/2017"