2015-06-29 5 views
2

У меня есть интегрированный синтаксический анализатор RSS в приложение iOS. Дата публикации опубликована в одном из полей полученных данных. Я могу разобрать эту дату, если в качестве языкового стандарта для iPhone используется английский-США. Но когда я изменяю язык iPhone на испанский, его невозможно преобразовать в объект NSDate.
Преобразование NSString в NSDate в Spanish Locale

Вот код, который я написал:

NSString* dt = @"Fri, 26 Jun 2015 00:00:00"; 
NSDateFormatter* dtFormatter = [[NSDateFormatter alloc] init]; 
//set the locale to spanish 
[dtFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"es"]]; 
[dtFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss"]; 
NSDate* conDt = [dtFormatter dateFromString:dt ]; 
NSLog(@"%@", conDt); //This value is always (null) 

Даже после установки локали «эс» (который является испанский), его до сих пор не в состоянии разобрать его правильно. Как преобразовать строку в дату в iOS?

ответ

4

Когда вы устанавливаете языковой стандарт, вы не хотите использовать языковой стандарт устройства, а не язык, используемый при создании строки (потому что вы берете английскую строку и хотите ее преобразовать в NSDate независимо от того, локали устройства). На самом деле, это рекомендуется использовать en_US_POSIX:

[dtFormatter setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]]; 

См Technical Q&A #1480. Это основное внимание уделяется проблеме григорианского календаря с строками даты RFC 3999/ISO 8601, но также применимо к языковым настройкам.


Кстати, я замечаю, что вы не устанавливаете часовой пояс. Часто, когда даты не содержат никакой информации о часовом поясе, они были преобразованы в GMT/UTC/Zulu. Таким образом, вы можете установить часовой пояс для форматировщиком тоже:

[dtFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; 

Учитывая, что временная компонента вашей струны «00:00:00», наверное, это не имеет существенного значения, но если дело с DateTime строки, вы часто хотите, чтобы вы правильно зафиксировали часовой пояс, используемый в строке.

+0

Точно. Установка идентификатора локали на «es» имеет смысл только в том случае, если вы знаете, что сервер управляется испанской компанией, которая по некоторым причинам сообщает о всех датах в испанском формате, что было бы очень необычно. – gnasher729