2012-02-13 67 views
5

我有這段代碼要讀取ISO 8601日期/時間規範。問題是,出於某種原因,這個月不起作用。每次我將它轉換成「01」。我究竟做錯了什麼?NSDateFormatter似乎有錯誤的月份

NSDateFormatter *UTCDateFormat = [[NSDateFormatter alloc] init]; 
[UTCDateFormat setDateFormat:@"yyyy-MM-DD'T'HH:mm:ss'Z'"]; 
[UTCDateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; 
[UTCDateFormat setCalendar:[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]]; 
[UTCDateFormat setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]]; 
NSLog(@"%@", [UTCDateFormat dateFromString:dateString]); 

因此,舉例來說,如果dateString是:

@"2002-03-12T21:13:27Z" 

我的輸出是:

2002-01-12 21:13:27 +0000 

事情我已經嘗試:

  • 改變的MM LL
  • 試過沒有setCalendar/setLocale
  • 試用'圍繞 -
  • MM轉換位置到其他地方。它從不改變任何東西。
  • 看了這麼多,它似乎適用於其他人。
+2

這可能不會改變任何東西,但我認爲'DD'格式說明符應該是'dd'。 – dasblinkenlight 2012-02-13 20:45:12

回答

15

試試這個

[UTCDateFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 

DD是不是 「月日」 的 「年度日」。尋找NSDateFormatter格式的一個很好的來源是this table

+1

哇......那麼爲什麼在這個世界上DD是防止MM工作的呢?似乎不應該發生。但非常感謝! – 2012-02-13 21:54:01

+0

'這張桌子'太棒了!這應該是Apple文檔。 – Lewis42 2015-09-25 23:59:40

+0

酷男。非常感謝 ! – 2017-03-27 11:11:15