मैं एक पॉइंट ऑब्जेक्ट में दिनांक स्ट्रिंग (ट्विटर एपीआई से प्राप्त) को पार्स करने के लिए boost :: date_time का उपयोग करने का प्रयास कर रहा हूं। दिनांक स्वरूप का एक उदाहरण है:वर्ष वैध सीमा से बाहर है: 1400 ... 10000
Thu Mar 24 16:12:42 +0000 2011
कोई फर्क नहीं पड़ता कि मैं क्या हालांकि करते हैं, मैं एक स्ट्रिंग पार्स करने का प्रयास करते समय अपवाद "वर्ष मान्य सीमा से बाहर है" मिलता है। दिनांक स्वरूप मेरे लिए सही लगती है, यहाँ कोड है:
boost::posix_time::ptime created_time;
std::stringstream ss(created_string);
ss.exceptions(std::ios_base::failbit); //Turn on exceptions
ss.imbue(std::locale(ss.getloc(), new boost::posix_time::time_input_facet("%a %b %d %T %q %Y")));
ss >> created_time;
उपरोक्त कोड में "created_string" ऊपर तिथि है। क्या मैंने प्रारूप स्ट्रिंग में गलती की है?
एक बात निश्चित है, आप 'new' एक समारोह कॉल के अंदर का उपयोग करके एक स्मृति रिसाव बना लिया है। क्या आप जावा या सी # के साथ अधिक अनुभवी हैं? –
हाँ चिंता न करें मुझे इसके बारे में पता है, मैं इसे काम करने के लिए कोशिश कर रहे कोड को पुन: व्यवस्थित कर रहा हूं, जब मुझे तारीख पार्सिंग मिलती है तो मैं इसे ठीक कर दूंगा :) संपादित करें: असल में, मुझे नहीं लगता परिणामस्वरूप रिसाव होता है ... time_input_facet को तब तक refcounted किया जाता है जब तक आप दूसरे वैकल्पिक कन्स्ट्रक्टर तर्क के रूप में 1 पास नहीं करते। – Kazade
हाँ, मैंने अभी चेक किया है, जब लोकेल नष्ट हो जाता है तो स्टैक परिणामों पर एक टाइम_इनपुट_फैसेट पर पॉइंटर पास करना (जब तक कि आप कन्स्ट्रक्टर को 1 पास न करें जो refcounting को अक्षम करता है)। तो उपर्युक्त कोड रिसाव नहीं करता है (भले ही ऐसा लगता है :) :) – Kazade