2013-02-18 3 views
2

Я использую следующий код NSDateFormatter для форматирования моих строк даты со следующим выходом: «2013-02-18 03: 23: 32,928000 +0000»Неожиданный выход из NSDateFormatter

Это последовательно работающим пока пользователь с европейским iPhone не был добавлен, где выход изменен: «2013-02-18 2:00:40 AM.118000 +0000»

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];  
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];  
[dateFormatter setTimeZone:timeZone];  
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSSSSS Z"]; 

Любой намек на то, почему форматировщик не работает последовательно?

+1

Это связано с тем, что пользователь установил 12/24-часовой режим своего телефона в конфликте с его стандартом 12/24 локали. Вы должны установить языковой стандарт вашего NSDateFormater на версию, которая не ведет себя таким образом, как правило, en_US_POSIX. –

+0

Спасибо, что указали это как дублирующий вопрос. Я все еще думаю, что есть смысл сохранить этот вопрос в живых, поскольку название другого вопроса не так прямо, как этот. Другими словами, когда я столкнулся с этой проблемой, я не думал, что ответ на мой вопрос задан в вопросе под названием «Каков наилучший способ справиться с языковой функцией NSDateFormatter»? ». Пожалуйста, дайте мне знать, как я должен редактировать и продолжать этот вопрос, чтобы сделать его в основном полезным для всех. Благодарю. – x89a10

ответ

5

В документации IOS, есть такая строка:

В прошивке, пользователь может переопределить по умолчанию AM/PM в сравнении с 24-часовым временем установки. Это может привести к тому, что NSDateFormatter перепишет строку формата , которую вы установили.

Именно поэтому вы получаете AM/PM в отличие от 24-часового формата.

Вы можете исправить это, переопределив языковой стандарт вашего NSDateFormatter.

[dateFormatter setLocale: 
[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]] autorelease]; 
+0

Я подозреваю, что версия init находится в категории, которую вы используете, - это недокументировано. См. [Этот ответ] (http://stackoverflow.com/a/6735644/581994) для немного другой категории. –

Смежные вопросы