2009-12-28 6 views
8

आप कैसे पता लगा सकते हैं कि आईफोन 12 घंटे या 24 घंटे के मोड में समय प्रदर्शित कर रहा है या नहीं?पता लगाएं कि आईफोन 12 घंटे या 24 घंटे के मोड में समय प्रदर्शित कर रहा है या नहीं?

मैं वर्तमान में परिवर्तन के लिए वर्तमान क्षेत्र पर नजर रखने, हालांकि यह है कि केवल सेटिंग कैसे बार प्रदर्शित किए जाते हैं प्रभावित करता है नहीं है। & दिनांक सेटिंग में 24-घंटे टॉगल वर्तमान सेटिंग्स सेटिंग्स को ओवरराइड करता है।

क्या इस 12/14 घंटे की सेटिंग का पता लगाने का कोई तरीका है?

उत्तर

13

मैं एक छोटे से समारोह मैं NSLocale की एक श्रेणी में शामिल किया है के साथ इस का निर्धारण करने का एक सभ्य तरीका खोज निकाला है। यह बहुत सटीक प्रतीत होता है और कई क्षेत्रों के साथ परीक्षण करते समय इसके साथ कोई समस्या नहीं मिली है।

@implementation NSLocale (Misc) 
- (BOOL)timeIs24HourFormat { 
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    [formatter setDateStyle:NSDateFormatterNoStyle]; 
    [formatter setTimeStyle:NSDateFormatterShortStyle]; 
    NSString *dateString = [formatter stringFromDate:[NSDate date]]; 
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]]; 
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]]; 
    BOOL is24Hour = amRange.location == NSNotFound && pmRange.location == NSNotFound; 
    [formatter release]; 
    return is24Hour; 
} 
@end 
1

आप NSDateFormatter वर्ग का उपयोग कर रहे हैं? जहां तक ​​मुझे पता है, यह मानता है कि उपयोगकर्ता के क्षेत्रीय समय-स्वरूप सेटिंग्स जो भी हो।

संपादित करें - पुन: अपनी टिप्पणी:

प्रारूप स्ट्रिंग तुलना सही दृष्टिकोण हो सकता है।

NSDateComponents *midnightComp = [[NSDateComponents alloc] init]; 
[midnightComp setHour:0] 
[midnightComp setMinute:0]; 
NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
[format setDateStyle:NSDateFormatterNoStyle]; 
[format setTimeStyle:NSDateFormatterShortStyle]; 
BOOL midnightIsZeros = [[[format stringFromDate:[[NSCalendar currentCalendar] dateFromComponents:midnightComp]] substringToIndex:2] isEqualToString:@"00"]; 

[[NSUserDefaults standardUserDefaults] setBool:midnightIsZeros forKey:@"TimeWas24Hour"]; 

भागो कि रूप में अपने अनुप्रयोग इस्तीफा, तो यह फिर से जब एप्लिकेशन लॉन्च होने करते हैं और चूक में संग्रहीत मूल्य के विरूद्ध उसकी जांच: की तर्ज पर कुछ।

+1

मुझे मूल रूप से यह पता लगाने की आवश्यकता है कि अंतिम लोड के बाद से सेटिंग बदल गई है या नहीं। मैं लोकेल पहचानकर्ता का पता लगा सकता हूं, लेकिन 24 घंटे की सेटिंग के लिए ऐसी कोई सेटिंग नहीं है। केवल एक चीज जिसे मैं सोच सकता हूं, सहेजी गई स्वरूपित दिनांक स्ट्रिंग की तुलना करना है, लेकिन टाइमज़ोन और डेलाइट बचत के साथ समस्याएं हैं जो प्रत्यक्ष तुलना के साथ समस्याएं उत्पन्न कर सकती हैं। –

+0

उस अतिरिक्त के लिए धन्यवाद, हालांकि मैंने देखा है कि कई क्षेत्र वास्तव में 24 घंटे के मोड में 0 के साथ घंटे दिखाते हैं। –

+0

उस स्थिति में, उपर्युक्त के पहले दो वर्णों को पकड़ें, और जांचें कि वे या तो "00" या "0:" हैं। –

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