Swift не удалось проанализировать строку с датой до даты объекта

#swift #date #nsdate #swift3 #nsdateformatter

#swift #Дата #nsdate #swift3 #nsdateformatter

Вопрос:

У меня следующий формат даты:

 2016-08-26T05:16:50.200Z
  

И я пытаюсь проанализировать похожие строки в формате даты в Date объекты в Swift 3.0.

Вот мои усилия:

 let formatter = DateFormatter()
formatter.dateFormat = "yyyy-mm-dd EEEEE HH:mm:ss Z"
formatter.locale = Locale(identifier: "us")

var date = formatter.date(from: date_str)!
  

Где date_str имеет формат, указанный выше.
К сожалению, swift не распознает формат и возвращает nil.

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

Есть идеи о том, где мой формат неправильный?

Комментарии:

1. Может быть, глупый вопрос, но вы пытались удалить пробелы, чтобы строка точно соответствовала формату? «гггг-мм-дд ЭЭЭЭЭ ЧЧ: мм: ss Z» -> «гггг-мм-ддЭЭЭЭЭХХ: мм: ssZ»

2. @ZassX спасибо. Я думаю, что я пробовал, но не Z в конце. Позвольте мне попробовать.

3. @ZassX Нет, это не сработало. Честно говоря, когда я читал документацию о возможных значениях средства форматирования, Z был недоступен, и я тоже не знаю, что это значит в реальной дате.

4. Я пробовал использовать онлайн-форматер. Для меня это сработало нормально, но это означает, что строка даты была немного другой: 2016-08-26T05:16:50-0200 Я думаю, что Z в строке не должно быть. Также проверьте сами: nsdateformatter.com

Ответ №1:

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

Один момент времени может быть представлен путем объединения полного выражения даты, буквы T в качестве разделителя и допустимого выражения времени. Например, «2016-10-05T14:30».

Итак, теперь просто измените dateFomat значение на yyyy-MM-dd'T'HH:mm:ss.SSSZ , и вы получите нужную вам дату.

 let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
formatter.locale = Locale(identifier: "us")
var date = formatter.date(from: date_str)!
print(date)
  

Вывод:

введите описание изображения здесь

Комментарии:

1. Добро пожаловать, приятель 🙂