Можно ли определить формат даты, который адаптируется к изменяемым данным? - PullRequest
2 голосов
/ 11 января 2012

Мне нужно найти формат даты, который можно адаптировать к двум следующим датам:

  1. 2012-01-22T14:27:31.176+0000
  2. 2012-01-22T14:27:31+0000

Как видите, единственное отличие состоит в том, что дата 2 не имеет дробных секунд.

Два формата даты будут:

  1. yyyy-MM-dd'T'HH:mm:ss.SZ
  2. yyyy-MM-dd'T'HH:mm:ssZ

со вторым пропуском .S .

Можно ли сделать .S необязательным? Или я должен продолжать использовать 2 разных формата?

Проблема заключается в том, что я получаю дату от вызова API, и иногда это происходит с долями секунды, а иногда без.

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

Спасибо!

Ответы [ 5 ]

1 голос
/ 11 января 2012

Вы можете установить свойство NSDateFormatter lenient на YES, что позволит NSDateFormatter угадать вашу входную строку. Однако вам следует проверить это, поскольку это может дать вам некоторые ложные срабатывания.

0 голосов
/ 17 февраля 2012

Свойство "снисходительный", предложенное @JustSid в этом случае, не работает.

Не найдя «более чистого» решения, я вернулся к своему первому, который обнаруживал наличие десятичного знака и соответственно использовал два разных формата даты.

NSRange textRange =[targetDate rangeOfString:@"."];

if(textRange.location == NSNotFound) {
    format = @"yyyy-MM-dd'T'HH:mm:ssZ";
} else {
    format = @"yyyy-MM-dd'T'HH:mm:ss.SZ";
}
0 голосов
/ 11 января 2012

Не могли бы вы проверить длину строки и затем использовать один из 2 различных форматеров даты в зависимости от длины?

0 голосов
/ 11 января 2012

У меня было бы два средства форматирования даты, а затем выберите форматер даты для использования, в зависимости от того, есть ли десятичный разряд или нет в вашей строке даты.

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

В качестве альтернативы вы можете просто использовать строку формата с дробными секундами, ваши даты без дробных секунд будут просто отображаться с .00 в конце, могут выглядеть более согласованными?

0 голосов
/ 11 января 2012

Ну, во-первых, можно посмотреть на фактическую длину данных.Не чисто, но должно работать

...