2012-01-15 51 views
1

我不明白爲什麼下一段代碼只有在將區域格式設置爲美國時才起作​​用。本地化和日期

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"]; 
NSDate *date = [dateFormatter dateFromString:currentFeedPubDate]; 
NSLog(@"%@", date); 

否則它返回「(null)」。

任何人都可以幫我找出原因嗎?

回答

2

正如Krizz已經指出的那樣,問題在於本地化名稱不匹配。例如,如果您爲它提供日期,如Sun, 15 Jan 2012 22:52:00 GMT+1,並且手機當前設置爲德語,則它不會識別Sun,因爲它會查找德語星期幾名稱的縮寫,但不會找到它。

如果你知道在哪個地區格式輸入字符串將是你可以(而且需要),迫使你的日期格式是這樣的區域:

[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
+0

謝謝你們兩位的解釋。這是我以前不瞭解的。 – 2012-01-15 22:00:43

2

你的currentFeedPubDate是什麼?可能它就像Sun, 15 Jun 2012 22:31:30 GMT+1,對吧?

現在,請注意,而在美國的語言環境MMM將會像Jan(從英文1月),在波蘭的區域將是Sty(來自波蘭Styczeń,名稱爲月),因此您的字符串將不匹配。

+0

最有可能它已經絆倒星期幾的名字... – DarkDust 2012-01-15 21:45:52

0

此外,還有如果你可能會遇到問題某人在手機的偏好設置中切換12/24設置。這個問題在this thread中討論。

+0

爲什麼我們讓用戶做他們想要的東西...感謝信息,我會看看它。 – 2012-01-15 22:12:57

+0

是的,我從來沒有想出什麼好用戶 - 他們似乎只是造成麻煩。 – 2012-01-16 00:00:05