NSDateFormatter преобразование dateFromString

У меня проблемы с преобразованием объекта NSString в NSDate. Вот что я хочу сделать: я загружаю RSS-сообщение из Интернета. У меня есть сообщение полностью проанализировано NSXMLParser. После этого у меня есть такие части, как или сохраненные в определенные строки NSStrings. Я хочу преобразовать элемент (который включает дату публикации RSS-сообщения) в NSDate, чтобы я мог выполнить некоторые операции над ним, например, над объектом даты (например, сортировка, отображение на часах и т. Д.). Вот как выглядит моя:

"Ср, 25 сентября 2013 12:56:57 GMT"

Я попытался преобразовать его в NSDate следующим образом:

*//theString is NSString containing my date as a text
NSDate *dateNS = [[NSDate alloc] init];
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss ZZZ"];
dateNS = [dateFormatter dateFromString:theString];*

Тем не менее, после выполнения приведенного выше кода, dateNS всегда кажется (ноль).

Мой вопрос прост: как правильно преобразовать NSString с форматированной датой, подобной этой, в объект NSDate?

Кстати, я видел сайт http://www.unicode.org/reports/tr35/tr35-25.html. Кажется, есть много способов отформатировать определенную дату, но я не смог найти то, что я есть делаю неправильно.

2 ответа

Решение

Ваша проблема в том, что ваш форматировщик даты не совпадает с вашей строкой даты: вы должны установить форматировщик даты в том же формате, что и ваша строка даты

Мой пример:

// Преобразовать строку в дату

    NSString *beginString = @"Sat, 30 Dec 2013 14:45:00 EEST";
    //beginString = [beginString stringByReplacingOccurrencesOfString:@"EEST" withString:@""];
    //beginString = [beginString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];

    dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"]];
    [dateFormat setTimeZone:[NSTimeZone timeZoneWithName:@"Europe/Helsinki"]];
    [dateFormat setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
    dateFromString = [dateFormat dateFromString:beginString];

    //NSLog(@"Begin string: %@", beginString);

    //NSLog(@"not formated: %@", dateFromString);

    // Convert Date to string

    [dateFormat setTimeZone:[NSTimeZone localTimeZone]];
    [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"ru_RU"]];
    [dateFormat setDateFormat:@"dd MMMM yyyy"];
    myStrDate = [dateFormat stringFromDate:dateFromString];
    [currentTitle setPubDate:myStrDate];

NSDate * dateNS = [[NSDate alloc] init]; бесполезно, вам не нужно выделять какой-либо объект даты.

NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
NSLog(@"%@", [dateFormatter dateFromString:@"Wed, 25 Sep 2013 12:56:57 GMT"]);

Вы выводите дату правильно, вы уверены theString не nil?

Другие вопросы по тегам