NSDateFormatter с RSS pubDate - PullRequest
       5

NSDateFormatter с RSS pubDate

2 голосов
/ 10 сентября 2011

У меня есть некоторые проблемы с преобразованием строки rss pubdate в объект NSDate.

<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)'

Ответы [ 4 ]

7 голосов
/ 10 сентября 2011

Вам понадобится:

  • 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

1 голос
/ 19 октября 2015

Сначала вы можете попробовать следующий код:

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, ваш языковой стандарт неправильно расположен в формате "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 06:27:28 + 0000

0 голосов
/ 15 апреля 2014

Я использую этот код для форматирования дат RSS в Wordpress:

 + (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;

  }
0 голосов
/ 07 апреля 2014

Использование:

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

, чтобы разделить pubDate по пробелам и символам новой строки, а затем получить каждый элемент, который вы хотите показать, используя индексы массива.

...