2010-12-17 18 views
10

कृपया नीचे कोड और आउटपुट देखें।NSDateFormatter + dateFormatFromTemplate: विकल्प: लोकेल: बीयूजी?

NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease]; 
[dateComponents setYear:2011]; 
[dateComponents setMonth:1]; 
[dateComponents setDay:1]; 

NSDate *date = [[NSCalendar currentCalendar] dateFromComponents:dateComponents]; 

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:[NSDateFormatter dateFormatFromTemplate:@"YYYYMMMd" options:0 locale:[NSLocale currentLocale]]]; 

NSString *dateString = [dateFormatter stringFromDate:date]; 

NSLog(@"Happy New Year: %@", dateString); 

आउटपुट के लिए आप क्या उम्मीद करते हैं?

Happy New Year: Jan 1, 2011 

लेकिन नतीजा है ...

Happy New Year: Jan 1, 2010 

क्या गलत है? कृपया मदद करें ...

उत्तर

16

टेम्पलेट प्रारूप स्ट्रिंग @"yyyyMMMd" (वर्ष के लिए लोअरकेस "वाई" होना चाहिए)।

अपरकेस "वाई" कुछ और है (देखें Unicode Date Format Patterns)।

+4

+1 विशेष रूप से, वाई वर्तमान सप्ताह का वर्ष है। 1 जनवरी, 2011 का सप्ताह 2010 से संबंधित है, इसलिए वाईवाईवाई 2010 का उत्पादन करता है। – ughoavgfhw

+0

आपको बहुत धन्यवाद ~ – alforo

+0

@ughoavgfhw: धन्यवाद। मुझे जवाब में अंतर को इंगित करना चाहिए क्योंकि यह भ्रमित हो सकता है क्योंकि "वाई" ज्यादातर समय "काम" करता है। अपरकेस "वाई" आपको बताता है कि आपकी तिथि किस हफ्ते में शुरू होती है। इसलिए अगर 1 जनवरी गुरुवार को है, तो "वाई" उस सप्ताह के * प्रारंभ * वर्ष (यानी सोमवार) का वर्ष देगा। 7 जनवरी या बाद के लिए, "वाई" एक ही परिणाम "वाई" के रूप में देगा, लेकिन निश्चित रूप से सही प्रारूपण पत्र का उपयोग पहले स्थान पर करना बेहतर है। – Anna

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