MMM*_*MMM 0 parsing cocoa-touch objective-c nsdateformatter
我正试图转变@"Fri, 26 Aug 2011 10:51:00 +02:00"为NSDate:
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:dateString];
Run Code Online (Sandbox Code Playgroud)
我得到nil了结果; 我究竟做错了什么?
您可以使用getObjectValue:forString:range:error:方法来解析时区中包含冒号的日期:
// test date formatting
NSString *dateString = @"2012-04-11T18:34:19+00:00";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZ";
NSDate *date;
NSError *error;
[formatter getObjectValue:&date forString:dateString range:nil error:&error];
Run Code Online (Sandbox Code Playgroud)
时区中的冒号(+02:00)是个问题.根据Unicode标准# 35,1*3大写Z模式表示RFC 822时区.RFC 822时区表示与GMT(或UTC)的偏移量,并具有以下格式:
zone = "UT" / "GMT" ; Universal Time
...
...
/ ( ("+" / "-") 4DIGIT ) ; Local differential
; hours+min. (HHMM)
Run Code Online (Sandbox Code Playgroud)
如您所见,时区的小时和分钟之间没有冒号.因此,时区应该是+0200.
最合适的解决方案是首先生成符合Unicode标准的日期字符串,但如果您遇到此格式,则可能需要在将日期字符串传递给日期字符串之前对其进行预处理NSDateFormatter.
例如,快速修复将stringByReplacingOccurrencesOfString用于摆脱时区中的冒号:
// dateString --> Fri, 26 Aug 2011 10:51:00 +02:00
dateString = [dateString stringByReplacingOccurrencesOfString:@":"
withString:@""
options:0
range:NSMakeRange(25, [dateString length] - 25)];
// dateString --> Fri, 26 Aug 2011 10:51:00 +0200
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:dateString];
// date --> 2011-08-26 08:51:00 +0000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |