Как преобразовать дату UTC в NSDate? - PullRequest
1 голос
/ 24 марта 2010

У меня есть строка UTC, и я хотел бы преобразовать ее в NSDate.

static NSDateFormatter* _twitter_dateFormatter;
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
[_twitter_dateFormatter setLocale:_en_us_locale];

NSDate *d = [_twitter_dateFormatter dateFromString:sDate];

Когда я прохожу через отладчик, он равен нулю, хотя sDate равен "2010-03-24T02: 35: 57Z"

Не совсем уверен, что я делаю не так.

Ответы [ 3 ]

3 голосов
/ 24 марта 2010

То же самое касается необходимости выделения / инициализации объекта NSDateFormatter, но у вас есть и другая проблема: ваша строка формата даты не соответствует фактической дате, которую вы ей дали.

"EEE MMM dd HH:mm:ss ZZZ yyyy"
- vs -
"2010-03-24T02:35:57Z"

Эта строка формата будет выглядеть примерно так:

"Wed Mar 24 00:07:33 -0400 2010"

См. стандарт Unicode для значения строки формата даты.

1 голос
/ 24 марта 2010

Вы не выделяете или не инициализируете свой объект NSDateFormatter.

Попробуйте что-то вроде этого:

NSDateFormatter* _twitter_dateFormatter = [[NSDateFormatter alloc] init];
[_twitter_dateFormatter setFormatterBehavior:NSDateFormatterBehaviorDefault];
[_twitter_dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
[_twitter_dateFormatter setLocale:_en_us_locale];

NSDate *d = [_twitter_dateFormatter dateFromString:sDate];
[_twitter_dateFormatter release];

Также неясно, почему вы объявляете _twitter_dateFormatter как статический. Если вы пытаетесь избежать перераспределения, сделайте его иваром своего класса.

0 голосов
/ 30 сентября 2012

Apple предоставляет исходный код для Разбор даты и времени RFC 3339 . При использовании ARC вы можете настроить этот источник, удалив вызовы «autorelease».

FYI, RFC 3339 является подмножеством ISO 8601 с одним отклонением (отрицательное смещение нуля разрешено в RFC 3339). Таким образом, код Apple убивает двух зайцев одним выстрелом, обрабатывая так называемые даты в стиле «Интернет» RFC 3339, а также простые даты ISO 8601.

...