2011-09-10 96 views
2

我有一些问题,将一个rss pubdate字符串转换为一个NSDate对象。NSDateFormatter与RSS pubDate

<pubDate>Fri, 09 Sep 2011 15:26:08 +0200</pubDate> 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEE, d MMM yyyy HH:mm:ss Z"]; 
NSDate *date = [dateFormatter dateFromString:currentDate]; 
NSLog(@"DateObject : '%@'", date); 
[dateFormatter release]; 

我总是

[44157:10d03] DateObject : '(null)' 

回答

7

你需要:

  • dd代替d,因为这一天是零填充
  • ZZ代替Z,因为它不包括时区缩写名称

更多信息:http://unicode.org/reports/tr35/tr35-4.html#Date_Format_Patterns


当我运行此:

int main (int argc, const char * argv[]) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSString *str = @"Fri, 09 Sep 2011 15:26:08 +0200"; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"]; 
    NSDate *date = [dateFormatter dateFromString:str]; 
    NSLog(@"DateObject : %@", date); 
    [dateFormatter release]; 

    [pool drain]; 
    return 0; 
} 

我得到这个:

EmptyFoundation [19926:407] DateObject:2011-09- 09 13:26:08 +0000

+0

我从来没有与这个工作之前,但也许有因为另一个问题如果与OP代码一起使用,这似乎不起作用。 A [快速测试](http://imageshack.us/f/577/screenshot20110910at135.png/)。 – sidyll

+1

使用[dateFormatter setDateFormat:@“EEE,dd MMM yyyy HH:mm:ss ZZ”];它不会工作:-( – Philippxp

+0

我修剪我的pubDate whitespaces和换行符,现在它几乎完美的作品,但时间是-2小时,因为时区设置不正确。pubDate:Mon,2011年9月5日下午12点33分29秒+0200 DateObject:2011-09-05 10:33:29 +0000 – Philippxp

0

用途:

NSArray *array=[string componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

由空格和换行分裂pubdate的,然后使用数组的索引得到你想要显示每一个元素。

0

我使用此代码格式化WordPress的RSS提要日期:

+ (NSDate *)parseWordpressDate:(NSString *)dataWp { 

    NSArray *array=[dataWp componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; 

    //Tue, 04 Mar 2014 11:00:36 +0000 

    //day = index 1, month = 2, year = 3 
    NSString *yyear = [array objectAtIndex:3]; 
    NSString *mmonth = [array objectAtIndex:2]; 
    NSString *dday = [array objectAtIndex:1]; 

    NSDateFormatter *dateFormatterGMTAware = [[NSDateFormatter alloc] init]; 
    [dateFormatterGMTAware setDateFormat:@"yyyy-MMM-dd"]; 
     NSString *dateString = [NSString stringWithFormat:@"%@-%@-%@",yyear,mmonth,dday]; 
     NSDate *data = [dateFormatterGMTAware dateFromString:dateString]; 
     return data; 

    } 
1

首先,你可以试试下面的代码:

NSString *str = @"Mon, 19 Oct 2015 14:27:28 +0800"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"]; 
NSDate *date = [dateFormatter dateFromString:str]; 
NSLog(@"DateObject : %@", date); 

然而,如果你的DateObject仍然null,你的locale是不是正确位于"en_US_POSIX"格式。你需要改变你的语言环境。

NSString *str = @"Mon, 19 Oct 2015 14:27:28 +0800"; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZ"]; 
NSLocale *enUSPOSIXLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
[dateFormatter setLocale:enUSPOSIXLocale]; 
NSDate *date = [dateFormatter dateFromString:str]; 
NSLog(@"DateObject : %@", date); 

结果是:

DateObject:2015年10月19日6时27分28秒+0000