#ios #swift #xcode #nsdateformatter
#iOS #swift #xcode #nsdateformatter
Вопрос:
У меня есть строка такого типа, «2019-03-22», и я хочу преобразовать ее в эту строку, «22 марта 2019», в Swift.
Это выглядит просто, и я попробовал несколько разных способов. Но я еще не разобрался в этом.
Лучший код, который у меня есть, это:
let originalDate = "2019-03-22"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MMMM dd, yyyy"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let newDate = dateFormatter.string(from:originalDate)!
print(newDate)
Но я получаю эту ошибку Cannot convert value of type 'String' to expected argument type 'Date'
Как мне это исправить?
Ответ №1:
Вы пытаетесь преобразовать, string(from: string
что невозможно.
Сначала вам нужно преобразовать строку в дату с использованием формата yyyy-MM-dd
, а затем изменить формат и преобразовать его обратно в строку.
let dateString = "2019-03-22"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: dateString)!
dateFormatter.dateFormat = "MMMM dd, yyyy"
let newDate = dateFormatter.string(from:date)
print(newDate)
Комментарии:
1. Ах, мне пришлось форматировать это дважды! Спасибо, это сработало
Ответ №2:
Вам нужно прочитать предоставленную строку даты.
dateFormatter.dateFormat = "yyyy-MM-dd"
Теперь прочитайте строку с датой.
let aDate = dateFormatter.date(from: originalDate)
И затем вы предоставляете новый формат
dateFormatter.dateFormat = "MMMM dd, yyyy"
let newDateString = dateFormat.string(from: aDate)
Теперь вывод:
22 марта 2019
Полный код:
let originalDate = "2019-03-22"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let aDate = dateFormatter.date(from: originalDate)!
dateFormatter.dateFormat = "MMMM dd, yyyy"
let newDate = dateFormatter.string(from: aDate)
print(newDate)
Ответ №3:
Я уже использую следующий метод в своем проекте :
func dateFormat(_ originalDate: String) -> String{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from: originalDate)
dateFormatter.dateFormat = "MMMM dd, yyyy"
let valueDate = dateFormatter.string(from: date!)
return valueDate
}
Вы можете использовать метод, подобный этому :
dateFormat("2019-03-22") // March 22, 2019
Комментарии:
1. Поскольку
originalDate
это необязательно, этого не может бытьnil
. Проверка бессмысленна2. На самом деле это точно то же самое, что и мой ответ, за исключением того, что он заключен в функцию и объявляет две совершенно ненужные переменные.
3. На самом деле я использовал этот метод в своем коде, поэтому он становится простым в использовании, когда он обернут в функцию. Просто нужно передать параметр при вызове функции, и его можно использовать в любом месте проекта.