Как преобразовать строку с датой в строку в Swift?

#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. На самом деле я использовал этот метод в своем коде, поэтому он становится простым в использовании, когда он обернут в функцию. Просто нужно передать параметр при вызове функции, и его можно использовать в любом месте проекта.