具有NULL值的NSDateFormatter部分结果

时间:2013-09-18 11:39:48

标签: ios objective-c nsdate nsdateformatter

我正在解析RSS提要并使用NSDateFormatter,代码如下:

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
    if ([elementName isEqualToString:@"pubDate"]) {

        NSLog(@"CURRENT STRING %@", currentString);
        NSDateFormatter *df1 = [[NSDateFormatter alloc] init];
        [df1 setDateFormat:@"EEE, d MMM yyyy hh:mm:ss ZZZZ"];
        NSDate *newDate = [df1 dateFromString:currentString];
        NSLog(@"NEW DATE %@", newDate);     

        }
}

以下是CURRENT STRING的日志,即提供给dateformatter的输入:

enter image description here

下图显示输出NEW DATE的日志,其中包含一些空值:

enter image description here

我在StackOverflow上尝试了许多问题,说使用NSLocale和其他东西,但它们对我不起作用。有谁可以指出这个问题?

2 个答案:

答案 0 :(得分:2)

在解析特定的本地化日期时,您应该为这些日期提供正确的本地化。

另请注意24(HH)或12(hh)小时符号:

    NSDateFormatter *df1 = [[NSDateFormatter alloc] init];
    df1.locale = locale = [[NSLocale alloc] initWithLocaleIdentifier:@"EN"];
    [df1 setDateFormat:@"EEE, d MMM yyyy HH:mm:ss ZZZZ"];
    NSDate *newDate = [df1 dateFromString:currentString];
    NSLog(@"NEW DATE %@", newDate);     

答案 1 :(得分:1)

在RSS中,你不必在NSLog中看到的是字符串是什么。

这种情况正在发生,因为你最后有空格,最后有\ n。

所以你需要删除那些空格和新行,如下所示。

NSString *yourString = [NSString stringWithFormat:@"%@", [[feeds objectAtIndex:indexPath.row] objectForKey:@"myStringCode"]];
yourString = [yourString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
yourString = [yourString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];

执行此操作后,尝试格式化日期。