2012-02-13 103 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