के साथ एक आरएफसी 822 दिनांक को पार्स करना मैं आईफोन पर आरएफसी 822 की तारीख को पार्स करने के लिए एनएसडीएटीफॉर्मेटर का उपयोग कर रहा हूं। हालांकि, दिनांक प्रारूप में वैकल्पिक तत्व निर्दिष्ट करने का कोई तरीका नहीं है। आरएफसी 822 विनिर्देशन में कुछ वैकल्पिक भाग हैं जो दिनांक पार्सर को तोड़ रहे हैं। अगर कुछ भी काम नहीं करता है, तो मुझे शायद चश्मे का पालन करने के लिए एक कस्टम पार्सर लिखना होगा।NSDateFormatter
उदाहरण के लिए, दिन का नाम स्पेक में वैकल्पिक है। इसलिए इन दोनों तिथियां मान्य हैं:
Tue, 01 Dec 2009 08:48:25 +0000
प्रारूप EEE, dd MMM yyyy HH:mm:ss z
01 Dec 2009 08:48:25 +0000
प्रारूप dd MMM yyyy HH:mm:ss z
इस के साथ पार्स किया गया है साथ पार्स किया गया है मैं वर्तमान में क्या उपयोग कर रहा हूँ है:
+ (NSDateFormatter *)rfc822Formatter {
static NSDateFormatter *formatter = nil;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
NSLocale *enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatter setLocale:enUS];
[enUS release];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
}
return formatter;
}
+ (NSDate *)dateFromRFC822:(NSString *)date {
NSDateFormatter *formatter = [NSDate rfc822Formatter];
return [formatter dateFromString:date];
}
और के रूप में की तारीख को पार्स निम्नानुसार:
self.entry.published = [NSDate dateFromRFC822:self.currentString];
एक तरीका दोनों रूपों को आजमाएं चींटियों, और जो भी शून्य शून्य मूल्य देता है ले लो। हालांकि, spec (दिन का नाम और सेकंड) में दो वैकल्पिक भाग हैं और 4 संभावित संयोजन होंगे। अभी भी बहुत बुरा नहीं है, लेकिन यह थोड़ा हैकी है।
यह मेरे लिए सबसे व्यावहारिक समाधान जैसा लगता है, महीने और दिन के नाम निश्चित लंबाई के हैं और अन्य सभी मान निश्चित-लंबाई संख्यात्मक हैं। एक काम करता है जब तक प्रारूपों की कोशिश करने से कहीं ज्यादा सस्ता! –
एक बुनियादी समाधान लागू किया गया। इसके साथ बहुत खुश नहीं है, लेकिन अब तक यह सबसे अच्छा है :) एक कॉमा सप्ताहांत की उपस्थिति की पहचान करता है, और दो कोलन सेकंड की पहचान करने में मदद करते हैं। यह बहुत अच्छा होगा अगर तिथि में उस स्पेक का संदर्भ शामिल था, जिसकी तारीख निम्नलिखित थी, क्योंकि प्रारूपों की संख्या कई भाषाओं में वास्तव में बोझिल है। – Anurag