2013-01-06 16 views
0

我有一些問題,因爲在今年年底將一個NSString到NSDate的增加一年。該代碼一直偉大的工作之前,但它突然開始表現奇怪...轉換的NSString的NSDate在某些情況下

例如2013年1月5日,當轉換成NSDate的成爲2014年1月5日。

因爲它是一個全年不覺得這是時區驚嚇。

它不使用日期從2012年起

這樣做沒有任何人有什麼可能是錯誤的想法?

代碼: 的NSString * dateString = postInfo.no​​teDate; NSString * newDateString = [dateString substringToIndex:10];

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"YYYY-MM-dd"]; 
    NSDate *date = [[NSDate alloc] init]; 
    date = [dateFormat dateFromString:newDateString]; 

newDateString返回2013年1月5日

返回日期2014年1月5日

回答

5

docs

Ÿ1997年1..1年( 「創周」 基於日曆)。通常,長度指定填充,但對於兩個字母,它也指定最大長度。今年指定用於ISO 8601定義的ISO年曆日曆,但可用於需要星期處理的非格里曆日曆系統。可能並不總是與歷年相同的價值。

y 1..n 1996年。通常,長度指定填充,但對於兩個字母,它也指定最大長度。

所以,你要「YYYY」

這個「錯誤」也被在夢幻般的WWDC 2011 Video "Session 117 - Performing Calendar Calculations"討論的,必須看到在任何iOS /可可開發。在ISO 8601


NSDate *date = [[NSDate alloc] init]; 
date = [dateFormat dateFromString:newDateString]; 

維基百科的文章,您創建的NSDate和比你創建另一個和覆蓋的第一個。只要做到

NSDate *date = [dateFormat dateFromString:newDateString]; 
+0

謝謝其他日期更正!是排除故障的遺留物... – Tom

+0

確保您觀看鏈接的視頻。他們正在解釋一些可能遇到的問題。 (即你正在刪除時間組件,這可以 - 但不是必須 - 導致麻煩) – vikingosegundo

+1

假設這也是iOS本身的免打擾錯誤的原因... –

3

使用yyyy作爲一年不YYYY,這給本週的一年。見ISO標準。在小寫字母

+0

謝謝所有的努力回答,不幸的是我無法檢查你們所有的......:/ – Tom

+0

不客氣。 vikingosegundo的答案涵蓋了很好的參考資料。乾杯。 –

3

使用YYYY,YYYY是另一件事:

年( 「創周」 基於日曆)。今年指定用於ISO 8601定義的ISO年曆日曆,但可用於需要星期處理的非格里曆日曆系統。可能並不總是與歷年相同的價值。

看到http://www.unicode.org/reports/tr35/tr35-19.html#Date_Format_Patterns

+0

謝謝所有的努力回答,不幸的是我不能檢查你們所有的......:/ – Tom

0

我希望這將有助於ü。試試這個

- (NSDate*) dateFromString:(NSString*)aStr 
    { 

     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 

     [dateFormatter setDateFormat:@"MM/dd/yyyy HH:mm:ss a"]; 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

     NSLog(@"%@", aStr); 
     NSDate *aDate = [dateFormatter dateFromString:aStr]; 
     [dateFormatter release]; 
     return aDate; 
    } 
+0

這有錯誤的格式。 – vikingosegundo