इस लाइन जोड़ें:
NSDateFormatter *parser = [[NSDateFormatter alloc] init];
[parser setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
और यह काम करेंगे। डिफ़ॉल्ट रूप से, NSDateFormatter
सिस्टम के वर्तमान लोकेल का उपयोग करता है, जो वर्तमान उपयोगकर्ता की प्राथमिकताओं के आधार पर भिन्न हो सकता है। ऊपर की तारीख स्ट्रिंग (@"Tue, 23 Nov 2010 16:14:14 +0000"
) में अंग्रेजी शब्द ("ट्यू", "सेप") शामिल हैं जो संभावित रूप से डेट फॉर्मेटर द्वारा पहचाना नहीं जाएगा यदि लोकेल अंग्रेजी के अलावा किसी अन्य चीज़ पर सेट किया जाएगा।
इसके अलावा, गैर-पश्चिमी संस्कृतियों के उपयोगकर्ता स्थानीय लोगों का उपयोग कर सकते हैं जो पश्चिमी दुनिया में उपयोग किए जाने वाले ग्रेगोरियन कैलेंडर की तुलना में एक अलग कैलेंडर का उपयोग कर सकते हैं। यदि आपने लोकेल को स्पष्ट रूप से सेट नहीं किया है, तो डेट फॉर्मेटर तिथि को पार्स करने में सक्षम हो सकता है लेकिन परिणामी NSDate
समय पर एक पूरे बिंदु का प्रतिनिधित्व करेगा।
लोकेल पहचानकर्ता @"en_US_POSIX"
इस उद्देश्य के लिए है। यह बदलने की गारंटी है भले ही @ "en_US" लोकेल किसी दिन अपनी डिफ़ॉल्ट सेटिंग्स को बदल दे।
स्रोत
2010-11-24 09:19:07
आपका डिवाइस/सिम्युलेटर क्या लोकेल सेट है? यह केवल तभी काम करेगा जब लोकेल अंग्रेजी पर सेट हो। –
मेरा लोकेल फ्रेंच है ... मैंने इसके बारे में सोचा नहीं, मुझ पर शर्म की बात है :) क्या इस कोड को शुरुआती तारीख को बदले बिना अधिकांश मौजूदा लोकेशंस के साथ संगत बनाने का कोई तरीका है? – Harkonnen
आप पार्सिंग (उदाहरण के लिए en_US_POSIX) के लिए एक विशिष्ट लोकेल का उपयोग करने के लिए NSDateFormatter को बता सकते हैं। [ऐप्पल क्यूए 1480] देखें (http://developer.apple.com/library/ios/#qa/qa2010/qa1480.html)। – Anna