2013-07-23 5 views
17

क्या ओस्ट्रीम के इस्तेमाल से जुड़े लोकेल के उचित स्वरूपण नियमों का उपयोग करके वर्तमान दीवार समय को मुद्रित करने के लिए सी ++ 11 में कोई आसान तरीका है?सी ++ 11 में वर्तमान समय प्रिंट कैसे करें?

क्या मैं सच में करना चाहते हैं कुछ इस तरह है:

myStream << std::chrono::system_clock::now(); 

और तारीख और समय जो कुछ भी स्थान myStream साथ जुड़ा हुआ है के साथ समझौते में मुद्रित है। सी ++ 11 put_time प्रदान करता है, लेकिन यह एक स्वरूपण स्ट्रिंग लेता है, और मैं प्रारूप के साथ लोकेल सहयोगी द्वारा प्रारूप निर्धारित करना चाहता हूं। time_put और time_put_byname भी है, लेकिन cppreference.com पर उदाहरणों के आधार पर, इन फ़ंक्शंस का उपयोग put_time के साथ किया जाता है।

क्या मैन्युअल रूप से फ़ॉर्मेट किए बिना टाइमपॉइंट मान मुद्रित करने का कोई आसान तरीका नहीं है?

उत्तर

16

आप का उपयोग प्रारूप स्ट्रिंग के साथ "%c" पर कर सकते हैं। %c लोकेल के लिए मानक दिनांक और समय स्ट्रिंग के लिए प्रारूप विनिर्देशक है। परिणाम मेरी मशीन ("जर्मन टाइमज़ोन में, POSIX en_US लोकेल) पर" मंगल जुलाई 23 1 9:32:18 सीईएसटी 2013 "जैसा दिखता है।

auto now = std::chrono::system_clock::now(); 
auto now_c = std::chrono::system_clock::to_time_t(now); 
std::cout << std::put_time(std::localtime(&now_c), "%c") << '\n'; 
+9

मुझे आश्चर्य हुआ कि डेटाटाइम डेटा प्रिंट करने के लिए कोई * आधुनिक * तरीका नहीं है। हमें पुराने स्टाइल सी एपीआई का उपयोग करना होगा। लेकिन, ठीक है, 'std :: chrono' डेटाटाइम मामलों में एक महान अग्रिम है। लेकिन समय प्रिंट करने के लिए कोई सी ++ 11 रास्ता नहीं है? – Manu343726

+5

@ मनु 343726 (http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html) मानकीकृत नहीं किया गया था (सुनिश्चित नहीं है कि यह समय के दबाव के कारण था या अन्य कारणों से)। –

+0

@RMartinhoFernandes धन्यवाद! मुझे यह नहीं पता था। – Manu343726

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