2009-08-28 3 views
12

मैं अपने आईफोन ऐप में अपनी तिथि सेट करने के लिए NSDateFormatter का उपयोग कर रहा हूं, और तिथियां ठीक से दिखाई दे रही हैं। हालांकि, मुझे सभी लोकेशंस मिल रहे हैं (मेरा ऐप 12 अलग-अलग भाषाओं तक का समर्थन करता है) जो सेटडेटेटफॉर्मैट के माध्यम से निर्दिष्ट दिनांक प्रारूप में चिपक रहा है। आदर्श रूप से, मैं चाहता हूं कि तिथि प्रारूप प्रारूप के प्रारूप में उपयोगकर्ता के लिए क्षेत्रीय सेटिंग के रूप में दिखाई दे, मेरे प्रारूप का पालन करने के बजाय (जो अंग्रेजी के लिए अच्छा काम करता है लेकिन अन्य लोकेशंस के लिए प्राकृतिक नहीं हो सकता है)।NSDateFormatter को लोकेल-विशिष्ट दिनांक कैसे प्रदर्शित करें?

+ (NSString *)localizedStringFromDate:(NSDate *)date 
       dateStyle:(NSDateFormatterStyle)dateStyle 
       timeStyle:(NSDateFormatterStyle)timeStyle; 
तो जैसा

:

self.creationDate.text = [NSDateFormatter localizedStringFromDate:creationTimeStamp 
              dateStyle:NSDateFormatterMediumStyle 
              timeStyle:NSDateFormatterShortStyle]; 

कि तुम उत्पादन आप 'देना चाहिए

 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"MMMM dd, yyyy kk:mm:ss"]; 

    self.creationDate.text = [dateFormatter stringFromDate:creationTimeStamp]; 

उत्तर

11

समाधान मिला। कुंजी setDateFormat पर कॉल नहीं करना है, और आईफ़ोन में एपीआई स्वचालित रूप से setDateStyle और setTimeStyle में निर्दिष्ट चीज़ों के आधार पर प्रदर्शित करने के लिए उपयुक्त चीज़ चुन लेगी।

+0

यह समाधान -localizedStringFromDate API का उपयोग करने से बेहतर है क्योंकि -localizedStringFromDate द्वारा लौटाई गई स्ट्रिंग टाइमज़ोन कारक का सामना करेगी और कभी-कभी कुछ क्षेत्रों के लिए दिनांक/समय अप्रासंगिक होगा। टाइमज़ोन घटक को निकालने के लिए, हमें इसे अतिरिक्त रूप से करने की आवश्यकता है: [dateFormatter setTimeZone: [NSTimeZone timeZoneForSecondsFromGMT: 0]]; –

31

मैं निम्नलिखित NSDateFormatter बजाय एपीआई की कोशिश करेंगे:

के बाद मेरी कोड है फिर से ढूंढें, कोड को थोड़ा साफ करें, और आपको कुछ नकली स्मृति प्रबंधित करने से रोकें।

+0

लेकिन क्या होगा अगर मैं दिया शैलियों के साथ यह शैली नहीं करना चाहती। इसके बजाए, मैं इस तरह की तारीख दिखाना चाहता हूं: अरबी और अंग्रेजी में एमएमएम वाई वाई वाई। क्या आप कृपया मदद कर सकते हैं? –

0

स्व निहित @ fbrereto के डिजाइन के साथ समाधान:

static NSString *FormatDate(NSDate *date) 
{ 
    return [NSDateFormatter localizedStringFromDate:date 
             dateStyle:NSDateFormatterMediumStyle 
             timeStyle:NSDateFormatterNoStyle]; 
} 

अब आप बस चला सकते हैं:

NSString *formattedDate = FormatDate([NSDate new]); 
+0

NSDateFormatter बनाने के लिए काफी महंगा है (Bekkis पोस्ट देखें: http://www.tinymission.com/post/nsdateformatter_is_expensive)। तो आपको केवल इस स्वयं निहित समाधान का उपयोग करना चाहिए जब इसे केवल कुछ ही समय के लिए बुलाया जाता है। शायद इस्तेमाल किए गए NSDateFormatter को स्थैतिक चर में आवंटित किया जाना चाहिए। – LaborEtArs

+0

अच्छा बिंदु, आप उपरोक्त से स्थिर-सी फ़ंक्शन में _dateFormatter में भी पास कर सकते हैं, और उपभोक्ता से इसका संदर्भ रख सकते हैं। – Zorayr