NSDateFormatter дает разные значения на устройстве и симуляторе? Что такое работа?

Я использую NSDateFormatter, проблема в его согласованности. Если я использую kCFDateFormatterMediumStyle, он дает формат как «26 ноября 2009 года» в симуляторе, но на устройстве он дает «26 ноября 2009 года».

Теперь у меня есть вопрос: можно ли в ближайшем будущем доверять этому NSFormatter или обновить его от Apple, может ли он снова изменить стиль?


person Madhup Singh Yadav    schedule 26.11.2009    source источник
comment
В сводке из ответов установлен формат даты NSDateFormatter, а не стиль даты для согласованности   -  person Madhup Singh Yadav    schedule 27.11.2009


Ответы (2)


NSDateFormatter форматирует дату в соответствии с предпочтениями пользователя на основе международных настроек устройства. Таким образом, вы никогда не можете ожидать, что эта строка будет согласованной из-за количества различных способов отображения дат по всему миру.

Я нашел лучший способ форматировать дату в виде строки (для использования для передачи на веб-серверы и т. Д.) - использовать NSDateComponents и преобразовать их в строки.

person Daniel Tull    schedule 26.11.2009
comment
Это не на 100% правильно. NSDateFormatter форматирует в соответствии с предпочтениями пользователя, да, но только при указании таких параметров, как kCFDateFormatterMediumStyle. Вместо этого вы можете очень легко настроить точную строку формата, если хотите. - person Mike Abdullah; 26.11.2009

Хотя другой ответ, упомянутый выше, является технически правильным, он не дает вам решения, которое вы ищете. Хотя NSDateFormatter по умолчанию использует пользовательские языковые стандарты (и поэтому не даст вам полезных результатов), вы можете запросить конкретный языковой стандарт для получения согласованных результатов:

NSDateFormatter *frm = [[NSDateFormatter alloc] init];
[frm setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];

NSLocale *en_US = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[frm setLocale:en_US];
[en_US release];
person Douglas Mayle    schedule 26.11.2009