2010-09-14 15 views
20

मैं अपने NSDateFormatter thusly आरंभ कर रहा हूँ कन्वर्ट:NSDate NSString करने के लिए NSDateFormatter साथ समय क्षेत्र के साथ बिना GMT समय संशोधक

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss z"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 
NSDate *date = [NSDate date]; 
NSString *dateString = [dateFormatter stringFromDate:date]; 

dateString अब है:

Thu, 29 Jul 2010 14:58:42 GMT+00:00 

मैं से छुटकारा पाने के लिए चाहते हैं "+ 00:00 "

मैं http://unicode.org/reports/tr35/tr35-6.html#Time_Zone_Fallback से अनुमान लगा रहा हूं कि मेरे पास स्थानीयकरण समस्या हो सकती है। मैं मैन्युअल रूप से "+00: 00" को हटाकर इस पर काम कर रहा हूं, लेकिन यह आदर्श नहीं है।

संपादित

मैं नए तरीके NSTimeZone बनाने के लिए की एक जोड़ी की कोशिश की, लेकिन वे दोनों एक ही dateString उत्पादन:

[NSTimeZone timeZoneWithName:@"GMT"]; 
[NSTimeZone timeZoneWithName:@"UTC"]; 
[NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[NSTimeZone timeZoneWithAbbreviation:@"UTC"]; 
+1

+1 दिलचस्प प्रश्न के लिए। मैं इसे खुद समझ नहीं सकता। बीटीडब्लू, आप 'z' विनिर्देशक का उपयोग कर संभावित मेमोरी रिसाव के बारे में जानना चाहेंगे: http://thegothicparty.com/dev/article/nsdateformatter-memory-leak/ –

+1

+1 "इस प्रकार" –

उत्तर

23

प्रारूप स्ट्रिंग अगर से पीछे चल रहे 'z' चरित्र निकालें आप समय क्षेत्र प्रदर्शित नहीं करना चाहते हैं।

संपादित

दूसरी ओर, अगर आप सिर्फ समय क्षेत्र का नाम प्रदर्शित करने के लिए, बस 'z' अपरकेस बनाना चाहते हैं। ((संपादित करें: नामित समय क्षेत्र के लिए छोड़ 'z' लोअरकेस, यानी पीएसटी और -0800 के लिए अपरकेस 'Z'))

संपादित

छोटे 'z' अन्य सभी समय-क्षेत्रों के लिए ठीक काम करता है, लेकिन दुर्भाग्यवश जीएमटी एक विशेष मामला है। तो सबसे आसान बात यह है कि 'z' को छोड़ दें और प्रारूपित तिथि पर "जीएमटी" संलग्न करें।

+0

का उपयोग करने के लिए +1 ओपी चाहता है समय क्षेत्र संक्षेप रखें, लेकिन +00: 00 बिट से छुटकारा पाएं। –

+0

आह, फिर अपरकेस 'जेड' का उपयोग करें। मैं अपना जवाब अपडेट करूंगा। – jlehr

+0

अपरकेस 'जेड' प्रति आरएफसी 822 मानकों "+0000" पैदा करता है। मैं बस "जीएमटी" –

4

स्वीकृत उत्तर में एक टाइपो था।

दूसरी ओर, अगर आप सिर्फ समय क्षेत्र का नाम प्रदर्शित करने के लिए, बस 'z' अपरकेस बनाना चाहते हैं।

नामित समय क्षेत्र के लिए 'z' लोअरकेस छोड़ देते हैं, यानी पीएसटी और -0800

NSDateFormatter *format = [[NSDateFormatter alloc] init]; 
    [format setDateFormat:@"MMMM dd, yyyy (EEEE) HH:mm:ss z Z"]; 
    NSDate *now = [NSDate date]; 
    NSString *nsstr = [format stringFromDate:now]; 

के लिए अपरकेस 'Z' // 23 जनवरी, 2013 (बुधवार) 12:33:46 पीएसटी -0800

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