2009-10-30 9 views
24

क्या सी ++ एसएलएल के पास मानक समय कक्षा है? या मुझे स्ट्रीम में लिखने से पहले सी-स्ट्रिंग में कनवर्ट करना होगा।क्या सी ++ में मानक दिनांक/समय कक्षा है?

 
time_t tm(); 
ostringstream sout; 
sout << tm << ends; 

इस मामले मैं आज की तारीख/किसी भी प्रारूपण के बिना एक संख्या के रूप में बाहर लिखा समय मिलता है: उदाहरण के लिए, मैं उत्पादन करने के लिए वर्तमान दिनांक/समय एक स्ट्रिंग स्ट्रीम करना चाहते हैं। मैं अगर एसटीएल एक समय वर्ग कि टाइम_टी मूल्य से instantiated जा सकता है टीएम पहले स्वरूपित करने के लिए ग क्रम समारोह strftime उपयोग कर सकते हैं, लेकिन इस तरह यह आवश्यक नहीं होना चाहिए लगता है

+2

अब समिति के समक्ष पूर्ण और आधुनिक सी ++ दिनांक/समय/समय क्षेत्र का प्रस्ताव है: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0355r1.html । यह प्रस्ताव इस जिथब भंडार पर आधारित है: https://github.com/HowardHinnant/date जिसमें पूर्ण कार्यान्वयन, पूर्ण प्रलेखन, और एक सक्रिय उपयोगकर्ता समुदाय है। –

उत्तर

4

भी एक ctime (& टाइम_टी) नहीं है विधि जो स्ट्रिंग आउटपुट (char *)।

+1

जो तब तक बिल्कुल उपयोगी नहीं है जब तक आपको * उस * समय/समय प्रारूप की आवश्यकता नहीं है। इसे देखकर मुझे केवल कंपकंपी मिलती है, हालांकि; मुझे नहीं लगता कि मैं कभी भी एक आवेदन में देखना चाहता हूं। – Joey

21

एसटीएल का हिस्सा नहीं है लेकिन प्रसिद्ध लाइब्रेरी को बढ़ावा मिला है।

मैं boost::date का उपयोग करने का तरीका जाऊंगा। यहां कुछ उदाहरण दिए गए हैं: http://www.boost.org/doc/libs/1_55_0/doc/html/date_time/date_time_io.html#date_time.io_tutorial

तुम बाहर बढ़ावा कोशिश नहीं की है, तो अभी तक मैं, तुम इतनी के रूप में यह तुम बुरा मुद्दों का एक बहुत से बचाता है करने के लिए प्रोत्साहित के रूप में यह मास्क सबसे ओएस निर्भर उदाहरण के लिए सूत्रण तरह बातें। boost में कई चीजें केवल हेडर हैं (टेम्पलेट लाइब्रेरीज़)। हालांकि डेटाटाइम को एक lib या dll की आवश्यकता होती है।

13

nitpicking: एसटीएल सामान्य कंटेनर और एल्गोरिदम आदि के साथ स्टैंडर्ड खाका लाइब्रेरी सौदों जा रहा है और भविष्य में भी तारीख से निपटने और गणना के लिए कक्षाओं को शामिल करने की संभावना नहीं है ...

सी ++ स्टैंडर्ड लाइब्रेरी में ही शामिल एसटीएल और सी मानक पुस्तकालय के पिछले संस्करण। उत्तरार्द्ध #include <ctime> के माध्यम से कुछ दिनांक और समय से संबंधित कार्यों की पेशकश करता है जिनका पहले से ही उल्लेख किया गया है।

यदि इन कार्यों को लपेटना (या बस उपयोग करना) boost में खींचने से पर्याप्त (और तेज़) है, तो इनके साथ जाएं। उनके साथ कुछ भी गलत नहीं है।

4

ठीक है। यहाँ मैं के बारे में सीधे एक धारा के लिए समय लिख पाया है सबसे करीब है:

time_t t(time(NULL)); // current time 
tm tm(*localtime(&t)); 

std::locale loc(""); // current user locale 
ostringstream sout; 
const std::time_put<TCHAR> &tput = 
    std::use_facet<std::time_put<TCHAR> >(loc); 
tput.put(sout.rdbuf(), sout, _T('\0'), &tm, _T('x')); 
sout << ends; 

CString sTest(sout.str().c_str()); 

एक बहुत ही उपयोगी गाइड है अपाचे सी ++ स्टैंडर्ड लाइब्रेरी संदर्भ गाइड http://stdcxx.apache.org/doc/stdlibref/time-put.html#sec13

6

वहाँ get_time और में <iomanip> हैडर put_time हैं (मुझे लगता है कि ये सी ++ 11 के साथ आए थे) जो स्ट्रिंग स्वरूपण या पार्सिंग नौकरियों को प्रभावी ढंग से करता है।

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