2011-02-16 13 views
21

मैं बूस्ट का उपयोग कर एक स्ट्रिंग में दिनांक/समय प्रारूपित करना चाहता हूं।बूस्ट का उपयोग करके स्ट्रिंग करने के लिए डेटाटाइम को कैसे प्रारूपित किया जाए?

वर्तमान दिनांक/समय के साथ शुरू:

ptime now = second_clock::universal_time(); 

और एक wstring इस प्रारूप में दिनांक/समय से युक्त के साथ समाप्त:

%Y%m%d_%H%M%S 

तुम मुझे कोड इस लक्ष्य को हासिल करने के लिए दिखा सकते हैं ? धन्यवाद।

उत्तर

25

जो कुछ के लिए यह यहाँ के लायक है, समारोह है कि मैं यह करने के लिखा है:

#include "boost/date_time/posix_time/posix_time.hpp" 
#include <iostream> 
#include <sstream> 

std::wstring FormatTime(boost::posix_time::ptime now) 
{ 
    using namespace boost::posix_time; 
    static std::locale loc(std::wcout.getloc(), 
         new wtime_facet(L"%Y%m%d_%H%M%S")); 

    std::basic_stringstream<wchar_t> wss; 
    wss.imbue(loc); 
    wss << now; 
    return wss.str(); 
} 

int main() { 
    using namespace boost::posix_time; 
    ptime now = second_clock::universal_time(); 

    std::wstring ws(FormatTime(now)); 
    std::wcout << ws << std::endl; 
    sleep(2); 
    now = second_clock::universal_time(); 
    ws = FormatTime(now); 
    std::wcout << ws << std::endl; 

} 

इस कार्यक्रम का उत्पादन किया गया था:

:

20111130_142732 
20111130_142734 

मैं इन कड़ियों उपयोगी पाया

+0

मैं अब इस परीक्षण कर रहा हूँ - हो सकता है wstringstream एक wtime_facet की जरूरत है और है कि जहां यह चुपचाप मेरे लिए असफल रहा था है। – mackenir

+1

यह काम करेगा लेकिन ध्यान दें कि यदि आप कई तिथियों के लिए एक ही प्रारूप का उपयोग करने जा रहे हैं, तो हर बार पहलू न बनाएं बल्कि इसे एक बार बनाएं और फिर इसे कई बार उपयोग करें। Imbue खुद महंगा नहीं है। – CashCow

+1

ध्यान दें कि आप लोकेल ऑब्जेक्ट को संग्रहीत करके ऐसा करेंगे। – CashCow

2
// create your date 
boost::gregorian::date d(2009, 1, 7); 

// create your formatting 
boost::gregorian::date_facet *df = new boost::gregorian::date_facet("%Y%m%d_%H%M%S"); 

// set your formatting 
ostringstream is; 
is.imbue(std::locale(is.getloc(), df)); 
is << d << endl; 

// get string 
cout << "output :" << is.str() << endl; 
+2

दोस्तों, गंभीरता से। सी # में मैं डेटटाइम लिख सकता हूं.अब.ToString ("yyyy-MM-dd एचएच: मिमी: एसएस") और यह सब कुछ है! इन दिनों सी ++ के साथ क्या गलत है ... – romanz

+0

आपने हाई स्कूल में अपने भतीजे की तरह लग रहा था :) मुझे यकीन है कि आपके द्वारा उल्लिखित कार्य कुछ ऊपर जैसा मैंने कोड किया है। यदि आप बेहतर यूजर इंटरफेस चाहते हैं, तो आपको बूस्ट पर एक एब्स्ट्रक्शन लेयर बनाना होगा। बढ़ावा लचीला होने के लिए बनाया गया है। पोको सी ++ पुस्तकालयों पर नज़र डालें। उनके पास जावा शैली इंटरफ़ेस बहुत अच्छा है जो कोड को बहुत आसान बनाता है। तो समस्या सी ++ के बारे में नहीं है :) –

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

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