NSDateFormatter - Дата разбора неисправности из Twitter JSON API - PullRequest
3 голосов
/ 11 декабря 2010

Я пытаюсь преобразовать строку из результата API Twitter в объект NSDate, используя NSDateFormatter. Я обнаружил, что NSDateFormatter просто возвращает текущую дату / время моей машины. Любая помощь будет принята с благодарностью!

Вот как выглядит строка, входящая в мою функцию:

Сб, 11 дек. 2010 01:35:52 + 0000

А вот и функция:

+(NSDate*)convertTwitterDateToNSDate:(NSString*)created_at
{
    // Sat, 11 Dec 2010 01:35:52 +0000
    static NSDateFormatter* df = nil;

    df = [[NSDateFormatter alloc] init];
    [df setTimeStyle:NSDateFormatterFullStyle];
    [df setFormatterBehavior:NSDateFormatterBehavior10_4];
    [df setDateFormat:@"EEE, d LLL yyyy HH:mm:ss Z"];

    NSDate* convertedDate = [df dateFromString:created_at];     
    [df release];

    return convertedDate;
}

И вот вернулась дата:

2010-12-10 17:58:26 -0800

Которые сейчас являются датой и временем моего компьютера.

* Примечание! * изменено управление памятью с автоматического высвобождения при выделении DateFormater на явный выпуск функции. При вызове этого в гигантском цикле я обнаружил, что он начал давать сбой с автоматическим выпуском (я предполагаю, что автозапуск не выпускался достаточно быстро), но изменение его на это решило проблему.

1 Ответ

1 голос
/ 11 декабря 2010

Я думаю, что это правильно. потому что исходная строка находится в часовом поясе +0000, а дата результата - в часовом поясе -0800. Поэтому, если вы внимательно посмотрите на них, вы заметите, что это то же самое время.

Когда вы печатаете дату, например, [описание даты], она будет напечатана в местном часовом поясе, я полагаю, но время абсолютно. Поскольку NSDate содержит только секунды, а не календари, а не информацию о часовом поясе.

(напечатанная строка относится к местному часовому поясу, но реальная дата является абсолютной)

...