2017-07-09 24 views
5

Hãy tha thứ cho câu hỏi đơn giản, nhưng tôi đã ở đây hàng giờ liền, không thành công. Im cố gắng để thực hiện một chức năng:Cách tạo std :: string từ luồng đầu ra?

std::string make_date_string() 

Tôi đang sử dụng lib ngày Howard Hinnant, mà cho phép tôi để làm công cụ như thế này:

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

in cái gì đó như:

2017-07-09 

tôi đang cố gắng tìm ra cách tôi có thể nhận được rằng đầu ra để đi trong một std :: string vì vậy tôi có thể trả lại nó từ chức năng của tôi, nhưng Im nhận được hư không.

Trả lời

6

Tôi đang cố gắng tìm ra cách tôi có thể nhận được kết quả đầu ra đó trong chuỗi :: std để tôi có thể trả về từ hàm của mình, nhưng Im không nhận được đâu.

Trong trường hợp như vậy, bạn có thể sử dụng một std::ostringstream:

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

Như một mặt lưu ý:

Như dường như hàm helper của bạn

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

được thực hiện dưới dạng iostream manipulator, có thể là được sử dụng với bất kỳ triển khai std::ostream nào.

+0

Cuối cùng tôi đã có thể hoàn thành nhiệm vụ tạo chuỗi ngày/giờ mà không cần sử dụng ctime theo cách di động, chúng ta sống ở độ tuổi nào! –

3

Câu trả lời được chấp nhận là câu trả lời hay (tôi đã upvoted).

Dưới đây là một công thức thay thế using the same library:

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

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

mà tạo ra một std::string với định dạng "2017-07-09". xây dựng đặc biệt này là tốt đẹp trong đó bạn không cần phải dứt khoát xây dựng một std::ostringstream, và bạn có thể dễ dàng thay đổi định dạng để bất cứ điều gì mà bạn thích, ví dụ:

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

mà bây giờ trở về "07/09/2017".

Các vấn đề liên quan