2012-08-31 11 views
5

का पता लगाएं मैं एक समय चुनने के लिए एक UIDatePicker का उपयोग कर रहा हूं। मैं पिकर की पृष्ठभूमि को भी अनुकूलित कर रहा हूं, हालांकि मुझे 12 अलग-अलग मोड (जो एएम/पीएम कॉलम प्रदर्शित करता है) या 24 घंटे मोड का उपयोग कर रहा है, इस पर निर्भर करता है कि मुझे 2 अलग-अलग छवियों की आवश्यकता है। मैं 12/24 घंटे के समय के लिए सेटिंग उपयोगकर्ताओं को कैसे पहचान सकता हूं?आईफ़ोन 24-घंटे की समय सेटिंग

धन्यवाद

उत्तर

3

और वहाँ शायद कई, कई और अधिक ...

+0

वाह, धन्यवाद। मैंने एक Google खोज की जो आम तौर पर स्टैक ओवरफ़्लो परिणाम दिखाता है लेकिन मैं पूरी तरह खाली हो गया! – Darren

31

दूसरों की तुलना में भी कम:

के रूप में Unicode Locale Markup Language – Part 4: Dates में दर्ज 210
NSString *format = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]]; 
BOOL is24Hour = ([format rangeOfString:@"a"].location == NSNotFound); 

स्पष्टीकरण

स्ट्रिंग स्वरूपण चरित्र AM/PM प्रतीक को प्रदर्शित करने, "एक" है।

यह एक विशेष प्रयोजन के प्रतीक है:

ही दस्तावेज़ भी विशेष टेम्पलेट प्रतीक 'जे' बताते हैं। यह पैटर्न या कंकाल डेटा में नहीं होना चाहिए। इसके बजाए, यह लचीली तारीख पैटर्न उत्पादन करने वाले एपीआई को पारित कंकाल में उपयोग के लिए आरक्षित है। इस तरह के संदर्भ में, यह लोकेल (एच, एच, के, या के) के लिए पसंदीदा घंटे प्रारूप का अनुरोध करता है, जैसा कि एच, एच, के, या के स्थानीय स्तर के मानक मानक समय प्रारूप में निर्धारित किया जाता है। ऐसे एपीआई के कार्यान्वयन में, 'j' को उपलब्ध Formats डेटा के खिलाफ एक मैच शुरू करने से पहले एच, एच, के, या के द्वारा प्रतिस्थापित किया जाना चाहिए। ध्यान दें कि एपीआई को पास किए गए कंकाल में 'जे' का उपयोग एक कंकाल का एकमात्र तरीका है जो लोकेल के पसंदीदा समय चक्र प्रकार (12-घंटे या 24 घंटे) का अनुरोध करता है।

NSString विधि dateFormatFromTemplate:options:locale: एप्पल के NSDateFormatter documentation में वर्णित है:

एक स्थानीय दिनांक स्वरूप स्ट्रिंग दी गई तिथि प्रारूप घटकों निर्दिष्ट स्थान के लिए उचित व्यवस्था की प्रतिनिधित्व करने देता है।

तो, क्या है कि विधि क्या करेंगे बारी है @"j" आप NSDateFormatter के लिए उपयुक्त एक प्रारूप स्ट्रिंग के लिए एक टेम्पलेट के रूप में गुजरती हैं। यदि इस स्ट्रिंग में कहीं भी am/pm प्रतीक @"a" है, तो आप लोकेल (और अन्य उपयोगकर्ता सेटिंग्स को आपके लिए ओएस द्वारा पूछताछ की जा रही है) पता है कि मैं/अपराह्न प्रदर्शित होना चाहता हूं।

+0

जब तक मैं इसे बहुत करीब नहीं पढ़ता, तब तक मैं काम नहीं कर रहा था, क्योंकि मैं काम नहीं कर रहा था। यह चालाकी है। अच्छा है! – Benjohn

+0

बस यह जोड़ने के लिए कि यह सिम्युलेटर पर काम नहीं करेगा। – GuybrushThreepwood

4

स्विफ्ट (3.x) तिथि एक्सटेंशन के रूप में दो सबसे लोकप्रिय समाधान के संस्करण:

extension Date { 

    static var is24HoursFormat_1 : Bool { 
     let dateString = Date.localFormatter.string(from: Date()) 

     if dateString.contains(Date.localFormatter.amSymbol) || dateString.contains(Date.localFormatter.pmSymbol) { 
      return false 
     } 

     return true 
    } 

    static var is24HoursFormat_2 : Bool { 
     let format = DateFormatter.dateFormat(fromTemplate: "j", options: 0, locale: Locale.autoupdatingCurrent) 
     return !format!.contains("a") 
    } 

    private static let localFormatter : DateFormatter = { 
     let formatter = DateFormatter() 

     formatter.locale = Locale.autoupdatingCurrent 
     formatter.timeStyle = .short 
     formatter.dateStyle = .none 

     return formatter 
    }() 
} 

उपयोग:

Date.is24HoursFormat_1 
Date.is24HoursFormat_2 

स्विफ्ट (2।0) NSDate एक्सटेंशन के रूप में दो सबसे लोकप्रिय समाधान के संस्करण:

extension NSDate { 

    class var is24HoursFormat_1 : Bool { 
     let dateString = NSDate.localFormatter.stringFromDate(NSDate()) 

     if dateString.containsString(NSDate.localFormatter.AMSymbol) || dateString.containsString(NSDate.localFormatter.PMSymbol) { 
      return false 
     } 

     return true 
    } 

    class var is24HoursFormat_2 : Bool { 
     let format = NSDateFormatter.dateFormatFromTemplate("j", options: 0, locale: NSLocale.autoupdatingCurrentLocale()) 
     return !format!.containsString("a") 
    } 

    private static let localFormatter : NSDateFormatter = { 
     let formatter = NSDateFormatter() 

     formatter.locale = NSLocale.autoupdatingCurrentLocale() 
     formatter.timeStyle = .ShortStyle 
     formatter.dateStyle = .NoStyle 

     return formatter 
    }() 
} 

कृपया ध्यान दें कि एप्पल NSDateFormatter (Date Formatters) पर निम्नलिखित कहते हैं:

एक तारीख फ़ॉर्मेटर बनाना एक सस्ते आपरेशन नहीं है। यदि आप अक्सर एक फॉर्मेटर का उपयोग करने के लिए की संभावना रखते हैं, तो यह कई उदाहरणों को बनाने और निपटाने के बजाय को कैश करने के लिए आमतौर पर अधिक कुशल होता है। एक दृष्टिकोण एक स्थिर चर का उपयोग करना है।

स्थिर के लिए कारण यही

दूसरी बात आप NSLocale.autoupdatingCurrentLocale() (is24HoursFormat_1 के लिए), इस तरह आप हमेशा वास्तविक वर्तमान स्थिति मिल जाएगा का उपयोग करना चाहिए करते हैं।

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