2011-02-27 9 views
9

मेरे आईफोन ऐप में, मैं यह निर्धारित करने में सक्षम होना चाहूंगा कि उपयोगकर्ता का लोकेल का दिनांक प्रारूप महीना/दिन (यानि जनवरी पांचवीं के लिए 1/5) या दिन/महीना (यानी 5/1 जनवरी के लिए) है या नहीं। मेरे पास एक कस्टम NSDateFormatter है जो NSDateFormatterShortStyle (11/23/37) जैसे मूल प्रारूपों में से एक का उपयोग नहीं करता है।यह निर्धारित करने के लिए कि क्या लोकेल का दिनांक प्रारूप महीना/दिन या दिन/महीना है?

एक आदर्श दुनिया में, मैं NSDateFormatterShortStyle का उपयोग करना चाहता हूं, लेकिन केवल वर्ष प्रदर्शित नहीं करता (केवल महीने & दिन #)। इसे पूरा करने का सबसे अच्छा तरीका क्या है? विकल्प::

उत्तर

18

आप NSDateFormatter के + dateFormatFromTemplate उपयोग करना चाहते हैं स्थान:

यहाँ कुछ एप्पल नमूना कोड है:

NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
NSLocale *gbLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]; 

NSString *dateFormat; 
NSString *dateComponents = @"yMMMMd"; 

dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:usLocale]; 
NSLog(@"Date format for %@: %@", 
    [usLocale displayNameForKey:NSLocaleIdentifier value:[usLocale localeIdentifier]], dateFormat); 

dateFormat = [NSDateFormatter dateFormatFromTemplate:dateComponents options:0 locale:gbLocale]; 
NSLog(@"Date format for %@: %@", 
    [gbLocale displayNameForKey:NSLocaleIdentifier value:[gbLocale localeIdentifier]], dateFormat); 

// Output: 
// Date format for English (United States): MMMM d, y 
// Date format for English (United Kingdom): d MMMM y 
+0

धन्यवाद! यही वह है जिसकी तलाश में मैं हूं। – Jason

4

बिल्डिंग नमूना कोड पर, यहाँ एक एक लाइनर यदि वर्तमान निर्धारित करने के लिए है

BOOL dayFirst = [[NSDateFormatter dateFormatFromTemplate:@"MMMMd" options:0 locale:[NSLocale currentLocale]] hasPrefix:@"d"]; 

: लोकेल दिन पहले (। nb मैं 'y' है कि इस प्रश्न के लिए हमें चिंता का विषय नहीं है के रूप में गिरा दिया) है

एनबी। dateFormatFromTemplate के लिए दस्तावेज़ बताते हैं कि "लौटाई गई स्ट्रिंग में टेम्पलेट में दिए गए बिल्कुल घटकों को शामिल नहीं किया जा सकता है, लेकिन उदाहरण के लिए-लोकेल-विशिष्ट समायोजन लागू हो सकते हैं।" यह दिया गया है, कभी-कभी परीक्षण किसी अज्ञात प्रारूप के कारण FALSE लौटा सकता है (जिसका अर्थ यह है कि यह अस्पष्ट होने पर महीने के पहले डिफ़ॉल्ट होता है)। अपने आप को तय करें कि आप कौन से डिफ़ॉल्ट पसंद करते हैं, या यदि आपको अतिरिक्त लोकेशंस का समर्थन करने के लिए परीक्षण को बढ़ाने की आवश्यकता है।

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