2017-07-09 13 views
5

簡単な質問を許しますが、私は何時間もこれを成功させました。出力ストリームからstd :: stringを作成する方法は?

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

印刷何かのように:

2017-07-09 

I私は、私はこのようなものを行うことができますハワードヒナントの日付libが、使用しています

std::string make_date_string() 

:イム機能を実装しようどのように出力を得ることができるのか理解しようとしています::文字列を私の関数から返すことができますが、私はどこにもありません。

答えて

6

私はそう、私は私の機能からそれを返すことができ、文字列::私はその出力がSTDに行くために得ることができる方法を把握しようとしているが、イムはどこにもなっていません。サイドノートとして

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

:このような場合には

あなたはstd::ostringstreamを使用することができます

それは

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

が実装されている、あなたのヘルパー関数のように見えたようiostream manipulatorとして、それは任意のstd::ostream実装で使用されます。

+0

最終的に私はctimeを移植可能な方法で使用せずに日付/時刻文字列を作成することができました。 –

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を作成する:ここ

代替製剤using the same libraryあります。今"07/09/2017"を返し

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

:この特定の製剤は、明示的std::ostringstreamを構築する必要はありませんし、あなたがたとえば、あなたが好きにフォーマットを簡単に変えることができ、その中でいいです。

関連する問題