Использование NSDateFormatter на iPhone, защита локали, но потеря компонентов даты - PullRequest
12 голосов
/ 09 июля 2009

Это немного сложный вопрос. Я использую NSDateFormatter на iPhone, но я хотел показать только стандартную дату без компонента лет. Но сохраните форматирование языкового стандарта для своей даты.

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

[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"];  // hurl.ws/43p9 (date formatting)

Но теперь дата в моем формате en-nz, например, 12:01 вечера в среду, 7 июля. Так что я полностью убил язык для других пользователей по всему миру.

Я бы хотел сказать.

Дайте мне правильную локализованную дату для этого регион пользователей, но пропущены годы компонент.

Поскольку дата отображается в виде строки, у меня возникает соблазн просто изменить ее, а затем удалить компонент года, просто вырезав его из строки.

Ответы [ 3 ]

16 голосов
/ 09 июля 2012

В iOS 4.0 правильный способ сделать это (см. Сеанс локализации из WWDC 2012), поддерживающий различные варианты локали "из коробки", использует следующий API, как упомянуто выше

+dateFormatFromTemplate:options:locale:

Например, чтобы получить длинный формат даты без года:

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];  
NSString *longFormatWithoutYear = [NSDateFormatter dateFormatFromTemplate:@"MMMM d" options:0 locale:[NSLocale currentLocale]]; 
[dateFormatter setDateFormat:longFormatWithoutYear];
//format your date... 
//output will change according to locale. E.g. "July 9" in US or "9 de julho" in Portuguese
11 голосов
/ 09 июля 2009

Вы можете попробовать что-то вроде:

//create a date formatter with standard locale, then:

// have to set a date style before dateFormat will give you a string back
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

// read out the format string
NSString *format = [dateFormatter dateFormat];
format = [format stringByReplacingOccurrencesOfString:@"y" withString:@""];
[dateFormatter setDateFormat:format];

Вид взлома, но он должен работать.

Редактировать: Вы можете сначала удалить вхождения строк @"y," и @" y", если у вас появятся лишние пробелы или запятые.

10 голосов
/ 14 декабря 2009

Проблема с ответом выше заключается в том, что @"y," и @" y" оба зависят от локализации. Я просто поиграл с установкой формата даты и времени на моем компьютере на японский, корейский и ряд других форматов. Вы обнаружите, что иногда год представлен символом на местном языке, иногда используется период или ряд других возможностей. Так что вам нужно будет найти и заменить все эти возможности, если вы хотите сохранить правильную зависимость от локализации.

Существует метод класса +dateFormatFromTemplate:options:locale:, который может помочь, хотя он не принимает стиль даты или времени и поэтому не такой гибкий.

Я не уверен, что есть хорошее решение с дополнительными API от Apple. Но даже тогда не ясно, что у них есть свои собственные локализации, разделенные на компоненты. Без этого это по сути невыполнимая задача.

...