2017-07-09 6 views
5

सरल सवाल क्षमा करें, लेकिन मैं इस पर घंटों तक रहा हूं, बिना सफलता के।आउटपुट स्ट्रीम से std :: स्ट्रिंग कैसे बनाएं?

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

मुद्रण कुछ की तरह:

2017-07-09 

मैं

std::string make_date_string() 

मैं हावर्ड Hinnant की तारीख lib, जो मुझे इस तरह सामान करने की अनुमति देता का उपयोग कर रहा: मैं एक समारोह को लागू करने की कोशिश कर रहा मैं यह पता लगाने की कोशिश कर रहा हूं कि मैं उस आउटपुट को std :: स्ट्रिंग में कैसे प्राप्त कर सकता हूं ताकि मैं इसे अपने फ़ंक्शन से वापस कर सकूं, लेकिन मुझे कहीं भी नहीं मिल रहा है।

उत्तर

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

मैं अंततः एक पोर्टेबल तरीके से सीटाई का उपयोग किए बिना दिनांक/समय स्ट्रिंग बनाने की अपनी खोज को पूरा करने में सक्षम था, हम किस उम्र में रहते हैं! –

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 है। यह विशेष रूप से तैयार करने में है कि आप स्पष्ट रूप से एक std::ostringstream का निर्माण करने की जरूरत नहीं है अच्छा है, और आप आसानी से उदाहरण के लिए प्रारूप जो कुछ भी करने के लिए आप की तरह भिन्न हो सकते हैं,:

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

जो अब रिटर्न "07/09/2017"

संबंधित मुद्दे