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

all*_*wei 16 iphone objective-c nsdate nsdateformatter ios

可能重复:
将ISO 8601时间戳转换为NSDate:如何处理UTC时间偏移?

我使用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"]);
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

gam*_*zii 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"]);
Run Code Online (Sandbox Code Playgroud)

组合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"]);
Run Code Online (Sandbox Code Playgroud)

  • 在我的情况下,我得到了类似的东西:"2015-05-07T16:16:47.054403Z"我不得不使用:"yyyy' - 'MM' - 'dd'T'HH':'mm':'ss. SSSZ" (2认同)
  • 解码iso 8601格式化日期只需将日期格式设置为"yyyy-MM-dd'T'HH:mm:ss.SSSZ",大"S"代表毫秒 (2认同)

归档时间:

查看次数:

17679 次

最近记录:

12 年,11 月 前