2010-09-22 13 views
6

मैं एनएसडीएटी प्रारूप का उपयोग कर रहा हूं ताकि एनएसडीएटी को प्रारूप में "एचडी: एमएम" प्रारूप में "डीएच एमएमएमएम वाईवाईवाई" प्रारूप में बनाया जा सके।आईएसडीएफ़फॉर्मेटर जब आईफोन 12 घंटे की घड़ी पर सेट होता है

[dateFormatter setDateFormat:@"HH:mm 'on' dd MMMM YYYY"]; 
[dateFormatter setLocale:[NSLocale currentLocale]]; 

तो मैं "22 सितंबर 2010 को 00:45 से डाटा" प्रदर्शित करने के लिए एक लेबल को अद्यतन करने रहा हूँ, विधि stringFromDate का उपयोग कर:

इस कोड मैं लिखा है है।

NSString *timeAndDateUpdated = [[NSString alloc] initWithFormat:@"Data from %@.", [dateFormatter stringFromDate:date]] 

लेबल सही ढंग से अद्यतन किया जाता है iPhone पर समय 24 घंटे के लिए सेट है, लेकिन अगर यह 12 घंटे के लिए सेट, लेबल प्रदर्शित करता है "से डेटा (शून्य)"।

क्या कोई इस समस्या को हल करने के बारे में जानता है?

धन्यवाद।

+0

मुझे लगता है कि नीचे मेरा उत्तर शायद इस पर स्वीकार किए जाते हैं जवाब होना चाहिए। यदि आप सहमत हैं तो क्या आप ओपी बदल सकते हैं? –

उत्तर

6

यदि तारीख पूरी तरह से उपयोगकर्ता को दी जाती है ("चालू" यह सुझाव देता है), तो मैं एक दिनांक प्रारूप को मजबूर नहीं करता।

[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

[timeFormatter setDateStyle:NSDateFormatterNoStyle]; 
[timeFormatter setTimeStyle:NSDateFormatterMediumStyle]; 

NSString * timeAndDate = [NSString stringWithFormat:"%@ on %@", 
    [timeFormatter stringFromDate:date], 
    [dateFormatter stringFromDate:date]]; 

भी ध्यान रखें कि एक NSDateFormatter को विन्यस्त अविश्वसनीय रूप से महंगा (लगभग 10 एमएस IIRC) है: यह लंबे समय से/मध्यम/लघु दिनांक और समय शैलियों, जो उपयोगकर्ता के क्षेत्र प्रारूप के अनुसार व्यवहार का उपयोग करने के और अधिक अनुकूल है । यह ठीक है अगर आप इसे केवल एक बार प्रदर्शित करने जा रहे हैं और अक्सर अपडेट नहीं करते हैं, लेकिन यदि आपके पास प्रति टेबल सेल है तो यह धीमा हो जाता है। मैंने हाल ही में डेट फॉर्मेटर्स को कैश करके ग्राफिक्स ड्राइंग 50x तेज किया है ...

+0

धन्यवाद। मैंने सोचा कि डेटा प्रारूप को मजबूर करना ठीक होगा क्योंकि ऐप केवल यूके में ही उपलब्ध होगा। क्या आपकी विधि का उपयोग करना अभी भी सबसे अच्छा है? इसके अलावा, स्क्रीन पर एक बार प्रदर्शित होता है और अक्सर नहीं बदला जाता है। –

+0

उपयोगकर्ता अभी भी दिनांक प्रारूप को कॉन्फ़िगर कर सकता है (उदा। 12-बनाम 24-घंटे); उपयोगकर्ता की इच्छाओं का सम्मान करना आम तौर पर एक अच्छा विचार है। –

0

मैंने यह कोड 3.1.2 और 4.1 पर 12 और 24 घंटे दोनों सेटिंग्स के साथ चलाया और यह ठीक काम किया।

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm 'on' dd MMMM YYYY"]; 
    [dateFormatter setLocale:[NSLocale currentLocale]]; 

    NSString *timeAndDateUpdated = [NSString stringWithFormat:@"Data from %@.", [dateFormatter stringFromDate:[NSDate date]]]; 

    NSLog(@"%@", timeAndDateUpdated); 

इस कोड, आप के लिए काम नहीं करता है कस्टम एक्सटेंशन/NSDateFormatter या NSDate के लिए श्रेणियों के लिए जाँच करें।

14

मैं बस इसमें भी भाग गया।

ऐसा प्रतीत होता है कि एनएसडीएटीफॉर्मेटर द्वारा लोकेल के अनुसार तारीखों को पार्स किया गया है, भले ही आप स्पष्ट रूप से डेट प्रारूप स्ट्रिंग निर्दिष्ट करते हैं!

तो इस मामले में, 24 घंटे की घड़ी एचएच को अनदेखा किया जा रहा है और यह डिवाइस पर सेट के रूप में 12 घंटे की घड़ी का उपयोग करके पार्स करने की कोशिश कर रहा है।

इसे ठीक करने का तरीका NSDateFormatter के लोकेल को स्पष्ट रूप से ओवरराइड करना है; जब घंटे पार्स करने इस उदाहरण en_US_POSIX करने के लिए इसे स्थापित करने के 24-घंटे घड़ी के लिए बाध्य करेगा में, प्रयोग की जाने वाली अर्थात

[dateFormatter setDateFormat:@"HH:mm 'on' dd MMMM YYYY"]; 
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
+0

स्टैक ओवरफ्लो नाथन को अपडेट करने के लिए धन्यवाद, और आपका स्वागत है, अपवित्र। –

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