2016-05-24 14 views
6

मैं समय के लिए जीसीसी 4.8 पर फंस गया हूं। मैं वर्तमान समय को सेकेंड के अलावा कुछ और प्रिंट करना चाहता हूं। यदि put_time काम किया, मेरे कोड कुछ सरल, इस तरह होगा:क्या GCC <5 के लिए std :: put_time का कोई अंतर्निहित विकल्प है?

std::cout << std::setw(24) << std::put_time(c_time, "[%T%z %F] "); 

put_time के बिना, मैं, मैन्युअल c_time के तत्वों का उपयोग और मैन्युअल रूप से सभी स्वरूपण कर दिया था जो एक में एक दर्द हो सकता है ** और कुछ ऐसा है जो मैं संभव हूं यदि संभव हो तो बचें। ध्यान दें कि यह का अर्थ यह नहीं है कि मैं कभी भी अप्रत्यक्ष रूप से सी से बातचीत नहीं करना चाहता हूं - अगर मैं संभव हो तो सीधे सी में कोडिंग से बचना चाहूंगा।

हालांकि, मुझे से अलग std::put_time पर कोई विकल्प नहीं मिल रहा है, जो मैं बचाना चाहता हूं क्योंकि इसे कोड की रेखाओं की लगभग दोगुनी आवश्यकता होती है और कम से कम मेरे लिए पढ़ने के लिए बहुत कठिन है। इसके अलावा, यह सी ++ है, सी नहीं, इसलिए जब भी संभव हो मैं सी कार्यों को स्पष्ट करना चाहता हूं।

क्या मुझे कुछ याद आ रही है? क्या std::put_time का एक बिल्टिन विकल्प है जो जीसीसी 4.8 के तहत काम करता है?

ध्यान दें कि इसे बिल्कुल उसी तरह से काम करने की ज़रूरत नहीं है - अगर यह कहें, तो स्ट्रीम स्ट्रीम मैनिपुलेटर होने के बजाय इसे सीधे आउटपुट पर मुद्रित करें, यह एकदम सही होगा, जैसा कि एक समारोह होगा जिसने std::string को स्वरूपित समय दिया था।

मैंने गुगलिंग का एक अच्छा सा किया है और <chrono> पाया है, लेकिन यह काम नहीं करता है क्योंकि इसमें समय स्वचालित रूप से प्रारूपित करने के लिए कुछ भी नहीं है। मुझे अभी भी इसे मैन्युअल रूप से करना होगा, और मुझे पूरा यकीन है कि यह और काम होगा, क्योंकि मुझे युग के बाद से एक वर्ष, महीने, दिन इत्यादि में सेकेंड की संख्या का विश्लेषण करना होगा।

उत्तर

4

chrono या iomanip पुस्तकालय में उपलब्ध कराए गए समय के outputing के लिए put_time के अलावा अन्य कोई कार्य करता हैं।

ctime लाइब्रेरी प्रदान करता है: strftime, ctime, और asctime

http://stackoverflow.com के बाद से 3 वां पक्ष के पुस्तकालयों खोजने के बारे में सवालों की अनुमति नहीं देता, मुझे लगता है कि तुम बस किसी strftime के उपयोग पर आप को निर्देशित करने के लिए पूछ रहे हैं जा रहा हूँ? std::put_time(c_time, "[%T%z %F] ") प्रारूप में लिखा जा सकता है:

char foo[24]; 

if(0 < strftime(foo, sizeof(foo), "[%T%z %F] ", c_time)) cout << foo << endl; 
+0

मैं अगर वहाँ थे पूछ रहा था किसी भी अंतर्निहित पुस्तकालयों जो विषय पर है यह करने के लिए,। आपने इसका उत्तर दिया है। इसके अलावा, स्टैक ओवरफ़्लो आपको यह कहने की अनुमति देता है, "यह एक लाइब्रेरी है जो आपकी समस्या हल करती है"; यह केवल विशेष रूप से ऑफ़साइट संसाधनों के लिए पूछ रहा है जो प्रतिबंधित है। दूसरे शब्दों में, यदि आप किसी तृतीय-पक्ष लाइब्रेरी के बारे में जानते हैं, तो आप इसका उल्लेख कर सकते हैं; यह वह नहीं था जो मैं पूछ रहा था। आपकी सहायताके लिए धन्यवाद! –

4

इसके अलावा, यह सी ++ है, सी नहीं, इसलिए जब भी संभव हो मैं सी कार्यों को स्पष्ट करना चाहता हूं।

यह एक सुंदर मूर्खतापूर्ण मानसिकता है। put_time हुड के नीचे std::strftime का उपयोग करता है।

ext.manip#10

रिटर्न: अनिर्दिष्ट प्रकार का एक वस्तु ... जहां समारोह f के रूप में परिभाषित किया गया है:

template <class charT, class traits> 
void f(basic_ios<charT, traits>& str, const struct tm* tmb, const charT* fmt) { 
    /* ... */ 
    typedef time_put<charT, Iter> TimePut; 

    /* ... */ 
} 

और time_put की परिभाषा locale.time.put.virtuals#1 में है:

प्रभाव: आउटपुट अनुक्रम s पर वर्णित वर्णों में पैरामीटर t की सामग्री स्वरूपित करता है। स्वरूपण को पैरामीटर प्रारूप और संशोधक द्वारा नियंत्रित किया जाता है, मानक लाइब्रेरी फ़ंक्शन strftime() पर स्ट्रिंग तर्क में प्रारूप विनिर्देशों के रूप में समान रूप से व्याख्या किया गया है ...

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