【问题标题】:How to create std::string from output stream?如何从输出流创建 std::string?
【发布时间】:2017-07-09 14:25:10
【问题描述】:

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

std::string make_date_string()

我正在使用 Howard Hinnant 的日期库,它允许我执行以下操作:

cout << floor<days>(system_clock::now());

打印类似:

2017-07-09

我试图弄清楚如何让输出进入 std::string 以便我可以从我的函数中返回它,但我无处可去。

【问题讨论】:

    标签: c++ stdstring


    【解决方案1】:

    我试图弄清楚如何让输出进入 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 实现一起使用。

    【讨论】:

    • 我终于能够完成创建日期/时间字符串的任务,而无需以便携式方式使用 ctime,我们生活在一个多么美好的时代!
    【解决方案2】:

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

    这是另一种表述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"

    【讨论】:

      猜你喜欢
      • 2020-04-12
      • 2020-05-01
      • 2021-08-13
      • 1970-01-01
      • 2022-01-02
      • 2010-10-06
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多