#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. Добро пожаловать, приятель 🙂