Как я могу определить, какой формат даты я получил?

При работе с широким спектром данных JSON, отправляемых с разных клиентов, стандартизация формата даты является реальной проблемой.

Я могу получить любой из этих: 2013-10-05
2-6-13
Пн, 13 июля 2013 г.

Иногда есть часы, минуты и секунды, а также информация о часовом поясе. Для каждого клиента мне приходилось вручную настраивать NSDateFormatter, или, если я не мог его проанализировать, я выполнял поиск подстроки. Что я действительно хотел бы сделать, так это объединить все это в один метод и каким-то образом определить, с каким типом я имею дело. Затем есть какой-то оператор switch, который обрабатывает синтаксический анализ для этой конкретной даты.

Я не могу изменить их форматы, но как мне лучше с ними справляться?


person DC2    schedule 19.07.2013    source источник
comment
Ну, некоторые форматы обязательно будут неоднозначными. Вы уверены, что это хорошая идея? Как вы сможете определить, является ли 2013-01-02 1 февраля или 2 января?   -  person Taum    schedule 19.07.2013
comment
Обратите внимание, что указание какого-либо компонента дважды (например, MM и MMM) обычно приводит к путанице dateFromString, и вы ничего не получите. Точно так же попытка интерпретировать день недели обычно вызывает проблемы.   -  person Hot Licks    schedule 19.07.2013
comment
@Таум. Да, вручную это единственный способ сделать это. Я добавляю поле типа к методу даты и добавляю другой код в зависимости от источника. Я хотел бы просто передать ему строку и использовать ее в NSDateFormatter, но данные настолько плохи, что иногда мне приходится вручную обрезать строку, прежде чем ее можно будет распознать.   -  person DC2    schedule 25.07.2013


Ответы (1)


Это не совсем ответ на ваш вопрос, но когда я ищу анализ дат, не будучи уверенным в формате, я обычно выбираю настройку NSDataDetector только для дат. Детектор часто обнаруживает даты на нескольких языках и форматирует все сразу. Это довольно аккуратно.

person aLevelOfIndirection    schedule 19.07.2013