如何解析日期字符串到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?

下一篇: Parsing date in Objective