如何解析日期字符串到iOS中的NSDate对象?
我想解析一个日期字符串从xml到iPhone应用程序中的NSDate对象
我知道这之前一定有人问过,但是,我相信我有正确的语法,但它不起作用。 我的代码有问题吗?
我需要解析的日期字符串是:
2011-01-21T12:26:47-05:00
我用来解析它的代码是:
self.dateFormatter = [[NSDateFormatter alloc] init];
[self.dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
[self.dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
[self.dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
...
else if([elementName isEqualToString:kUpdated]){
self.currentQuestion.updated = [self.dateFormatter dateFromString:self.currentParsedCharacterData ];
}
任何帮助不胜感激。 谢谢!
**基于来自ChrisKent的链接引用,我修复了这样的问题:
else if([elementName isEqualToString:kLastOnDeck]){
NSString *dateStr = self.currentParsedCharacterData;
// we need to strip out the single colon
dateStr = [dateStr stringByReplacingOccurrencesOfString:@":"
withString:@""
options:0
range:NSMakeRange([dateStr length] - 5,5)];
self.currentQuestion.lastOnDeck = [dateFormatter dateFromString:dateStr];
}
你不需要接近尽可能多的单引号(只需要非日期/时间字符),所以改变这一点:
[self.dateFormatter setDateFormat:@"yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"];
为此:
[self.dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
...
self.currentQuestion.updated = [self.dateFormatter dateFromString:[self.currentParsedCharacterData stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange([self.currentParsedCharacterData length] – 5,5)]];
文档在这里:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DataFormatting/Articles/dfDateFormatting10_4.html#//apple_ref/doc/uid/TP40002369-SW1
Unicode格式模式:http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
使用冒号处理时区(+00:00):http://petersteinberger.com/2010/05/nsdateformatter-and-0000-parsing/
最后我在冒号方面遇到了同样的问题。 这是我用来标准化日期以使NSDate
开心的功能。
/**
* Timezones are returned to us in the format +nn:nn
* The date formatter currently does not support IS 8601 dates, so
* we convert timezone from the format "+07:30" to "+0730" (removing the colon) which
* can then be parsed properly.
*/
- (NSString *)applyTimezoneFixForDate:(NSString *)date {
NSRange colonRange = [date rangeOfCharacterFromSet:[NSCharacterSet characterSetWithCharactersInString:@":"] options:NSBackwardsSearch];
return [date stringByReplacingCharactersInRange:colonRange withString:@""];
}
我花了一段时间才找到这个简单的答案。 并且有很多解决方案涉及引入额外的第三方代码。
对于那些现在正在苦苦挣扎的人,只支持iOS 6及以上版本。
您可以将日期格式化程序设置为
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZZ"]
这将正确处理冒号的“-05:00”。
链接地址: http://www.djcxy.com/p/5997.html上一篇: How to parse a date string into an NSDate object in iOS?