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

6

抱歉问一个简单的问题,但我已经尝试了几个小时,没有成功。我正在尝试实现一个函数:

std::string make_date_string()

我正在使用Howard Hinnant的日期库,可以让我执行如下操作:
cout << floor<days>(system_clock::now());

打印出类似以下的内容:
2017-07-09

我正在尝试找出如何将输出放入std::string中,以便我可以从我的函数中返回它,但我一无所获。
2个回答

8
我正在尝试找出如何将输出内容放入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操纵器实现,可与任何std::ostream实现一起使用。


我终于成功完成了我的任务,以一种可移植的方式创建日期/时间字符串,这是我们所处的时代! - Bas Smit

3

被接受的答案是一个很好的答案(我已经点赞了)。

这里有一种替代表述,使用相同的库:

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

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

这将创建一个格式为"2017-07-09"std::string。这种特定的表达方式很好,因为您不必显式构造std::ostringstream,并且您可以轻松地将格式变为您喜欢的任何格式,例如:

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

现在返回"07/09/2017"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接