Использование NSDateFormatter на iPhone, защита локали, но потеряющих компоненты даты
Это немного сложный вопрос. Я использую NSDateFormatter на iPhone, но я хотел показывать только стандартную дату без компонента years. Но сохраните форматирование локали пользователей для своей даты.
Я мог бы легко переопределить форматирование с помощью
[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"]; // hurl.ws/43p9 (date formatting)
Но теперь дата указана в моем формате en-nz, например, 12:01 PM среда, 7 июля. Поэтому я полностью убил локаль для любых других пользователей по всему миру.
Я хотел бы сказать.
Дайте мне правильную локализованную дату для этого пользователей, но опускать годы компонент.
Поскольку дата отображается в виде строки, у меня возникает соблазн только от даты, а затем удаляется компонент года, просто вырезая это из строки.
Ответы
Ответ 1
Вы можете попробовать что-то вроде:
//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"
, если у вас появятся некоторые лишние пробелы или запятые.
Ответ 2
Из 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
Ответ 3
Проблема с вышеприведенным ответом заключается в том, что @"y,"
и @" y"
зависят как от локализации. Я просто играл с настройкой формата даты и времени на моем компьютере на японский, корейский и ряд других форматов. Вы обнаружите, что иногда год представлен символом на локальном языке или иногда используется период или несколькими другими возможностями. Поэтому вам нужно будет искать и заменять все эти возможности, если вы надеетесь поддерживать правильную зависимость локализации.
Существует метод класса +dateFormatFromTemplate:options:locale:
, который может помочь, хотя он не соответствует стилю даты или времени и поэтому не является гибким.
Я не уверен, что есть хорошее решение с дополнительными API от Apple. Но даже тогда не ясно, что у них есть свои локализации, разделенные на компоненты. Без этого это по существу невыполнимая задача.