为什么NSDateFormatter无法解析ISO 8601格式的日期

时间:2011-10-28 04:05:06

标签: iphone objective-c ios nsdate nsdateformatter

  

可能重复:
  Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?

我使用rails作为后端,默认日期输出为2008-12-29T00:27:42-08:00

但是在我的研究之后NSDateFormatter无法支持它,除了我将日期更改为2008-12-29T00:27:42-0800

以下是我用于解析ISO 8601日期的代码,但它不起作用

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSLog(@"%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-08:00"]);

有什么想法吗?

1 个答案:

答案 0 :(得分:48)

问题在于时区到底。

您需要将其设置为:GMT-0X:00或-0X00,小时和分钟之间没有分开。

以下两种组合有效:

组合1 - 使用GMT格式(GMT-0X:00)和ZZZZ

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42GMT-08:00"]);

组合2 - 使用RFC 822格式(-0X00)和ZZZ

dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-0800"]);