NSDateFormatter dateFromString возвращает nil
Вот мой код:
NSString *_date = @"Tue, 23 Nov 2010 16:14:14 +0000"; NSDateFormatter *parser = [[NSDateFormatter alloc] init]; [parser setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss '+0000'"]; [parser setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]]; NSDate *date = [parser dateFromString:_date];
Это не запускается: «date» установлен в «nil». Я попытался с
[parser setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
Без успеха …
- фильтрация NSArray в новый NSArray в объективе-c
- как удалить subviews из scrollview?
- Отправить почту без MFMailComposeViewController
- Как размыть сцену в SpriteKit?
- iphone facebook side menu с помощью объектива c
Есть ли у вас какие-либо идеи ?
заранее спасибо
- Как настроить размер содержимого UIScrollView динамически
- Как перехватить ссылку на ссылку в UITextView?
- Как масштабировать UIImageView пропорционально?
- Как я могу получить точное время, например, в миллисекундах в Objective-C?
- Могу ли я отключить прокрутку звука UIPickerView?
- Как сделать кнопку перехвата надписью для перехвата событий?
- Очереди отправки: как узнать, запущены ли они и как их остановить
- UIPageViewController не возвращает никаких распознавателей жестов в iOS 6
Добавьте эту строку:
NSDateFormatter *parser = [[NSDateFormatter alloc] init]; [parser setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]];
и он будет работать. По умолчанию NSDateFormatter
использует текущую локаль системы, которая может меняться в зависимости от предпочтений текущего пользователя. Строка даты выше ( @"Tue, 23 Nov 2010 16:14:14 +0000"
) содержит английские слова («Tue», «Sep»), которые потенциально не будут распознаны форматированием даты, если языковой стандарт будет установлен на ничего, кроме английского.
Более того, пользователи из западных культур могут использовать локали, которые используют другой календарь, чем григорианский календарь, который используется в западном мире. Если вы явно не установили языковой стандарт, NSDate
даты мог бы проанализировать дату, но полученный NSDate
будет представлять собой целый другой момент времени.
Идентификатор локали @"en_US_POSIX"
предназначен для этой цели. Гарантируется, что он не изменится, даже если локаль @ «en_US» когда-нибудь изменит настройки по умолчанию.
Спецификатор часового пояса – «z», поэтому ваша строка должна быть:
[parser setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];