Как заменить разделители компонентов даты другими символами?

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

Например, в США следующий код возвращает «06.09.2014», но в Великобритании это будет «09.06.2014», и я хочу сохранить этот порядок, но заменить косую черту тире или пробелами. Однако я не верю, что могу просто проанализировать возвращенную строку и заменить экземпляры «/» другими символами, потому что в некоторых локалях они, вероятно, не используют «/» (я не уверен, но это кажется весьма вероятным).

NSDateFormatter.dateFormatFromTemplate("MMddyyyy", options: 0, locale: NSLocale.currentLocale())

Можно ли изменить символ разделителя компонентов даты, в то же время получая наиболее подходящий формат для текущей локали?


person Jordan H    schedule 06.08.2014    source источник
comment
Возможно, вы захотите просмотреть этот вопрос, хотя ни один из ответов кажутся особенно убедительными.   -  person jtbandes    schedule 07.08.2014
comment
@jtbandes В этом вопросе они хотели отобразить соответствующий разделитель в зависимости от локали. В моем случае я хочу заменить символ-разделитель другим символом, сохранив при этом все остальное.   -  person Jordan H    schedule 07.08.2014
comment
Да, и кажется, что естественный способ сделать это — найти персонажа и заменить его повсюду. У вас также может быть забавный дамп классов NSLocale или NSDateFormatter, чтобы посмотреть, сможете ли вы это сделать...   -  person jtbandes    schedule 07.08.2014
comment
Я думаю, вы пытаетесь быть слишком общим. Просто выберите несколько вариантов и позвольте пользователю выбирать между ними, при необходимости изменив разделитель, если это кажется целесообразным.   -  person Hot Licks    schedule 07.08.2014
comment
(Обратите внимание, что пользователь может отдельно выбирать форматы даты и времени, а затем объединять их в один формат, если вам нужен комбинированный формат.)   -  person Hot Licks    schedule 07.08.2014
comment
Я мог бы позволить им выбрать формат дня, формат месяца и т. д., а затем использовать dateFormatFromTemplate, чтобы получить соответствующую строку для тех компонентов, которые они выбрали, но мне все еще нужно решение для замены разделителя символом, который они выбирают.   -  person Jordan H    schedule 07.08.2014
comment
@jtbandes С этим связанным вопросом я мог бы реализовать аналогичное решение, чтобы получить символ-разделитель, а затем заменить его из моей строки, но мне нужно было бы знать все возможные разделители, чего я не знаю, и это кажется плохим решением. :)   -  person Jordan H    schedule 07.08.2014


Ответы (1)


Я просмотрел все языки на своем iPad и проверил краткий формат даты. Я обнаружил, что все языки используют один из этих трех разделителей: / . -

Поэтому, чтобы разрешить пользовательские разделители при сохранении формата, я просто заменяю эти символы пользовательским символом. Например:

dateFormatter.dateFormat = NSDateFormatter.dateFormatFromTemplate("MMddyyyy", options: 0, locale: NSLocale.currentLocale())
cell.dateLabel.text = dateFormatter.stringFromDate(NSDate())
cell.dateLabel.text = cell.dateLabel.text.stringByReplacingOccurrencesOfString("/", withString: " ", options: nil, range: nil)
cell.dateLabel.text = cell.dateLabel.text.stringByReplacingOccurrencesOfString(".", withString: " ", options: nil, range: nil)
cell.dateLabel.text = cell.dateLabel.text.stringByReplacingOccurrencesOfString("-", withString: " ", options: nil, range: nil)

Было бы неплохо найти лучшее решение.

person Jordan H    schedule 09.08.2014
comment
спасибо за усилия по изучению всех языков - person Julius; 12.04.2019