如何从输出流创建 std::string?
How to create std::string from output stream?
请原谅这个简单的问题,但我已经问了好几个小时了,但没有成功。我正在尝试实现一个功能:
std::string make_date_string()
我正在使用 Howard Hinnant 的日期库,它允许我做这样的事情:
cout << floor<days>(system_clock::now());
打印如下内容:
2017-07-09
我想弄清楚如何让输出进入 std::string 以便我可以 return 从我的函数中得到它,但我一无所获。
I'm trying to figure out how I can get that output to go in a std::string so I can return it from my function, but Im getting nowhere.
在这种情况下,您可以使用 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
实现一起使用。
已接受的答案是一个很好的答案(我已投赞成票)。
这是一个替代公式 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());
现在 returns "07/09/2017"
.
请原谅这个简单的问题,但我已经问了好几个小时了,但没有成功。我正在尝试实现一个功能:
std::string make_date_string()
我正在使用 Howard Hinnant 的日期库,它允许我做这样的事情:
cout << floor<days>(system_clock::now());
打印如下内容:
2017-07-09
我想弄清楚如何让输出进入 std::string 以便我可以 return 从我的函数中得到它,但我一无所获。
I'm trying to figure out how I can get that output to go in a std::string so I can return it from my function, but Im getting nowhere.
在这种情况下,您可以使用 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
实现一起使用。
已接受的答案是一个很好的答案(我已投赞成票)。
这是一个替代公式 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());
现在 returns "07/09/2017"
.