Преобразование строки в тип DATE в swift 3

У меня есть эта структура:

struct message {

  var id: String = "0"
  var text: String = ""
  var date: Date!
  var status: String = "" 
}

Мне нужно загрузить эту структуру из dbase, чтобы она экспортировала в формате String также "date". Поэтому я пишу этот код для преобразования типа String в Date:

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC") as TimeZone!
let dataDate = dateFormatter.date(from: elemMessage["date"] as! String)!

И я загружаю его в структуру:

message(id: elemMessage["id"] as! String, text: elemMessage["text"] as! String, date: dataDate as! Date, status: elemMessage["status"] as! String)

Но у меня есть это предупреждение: "Бросьте из" Дата "в несвязанный тип" Дата "всегда терпит неудачу"

Итак, если я запустил приложение, он потерпит неудачу.

Как я могу это исправить, структура 'date' var должна быть типа Date.

Спасибо.

Ответы

Ответ 1

Вы можете преобразовать String Date в Date/NSDate, как показано ниже: -

Swift 3.2 и Swift 4.0

Строка по дате

    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd-mm-yyyy" //Your date format
    dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00") //Current time zone
    let date = dateFormatter.date(from: "01-01-2017") //according to date format your date string
    print(date ?? "") //Convert String to Date

Дата для строки

    dateFormatter.dateFormat = "MMM d, yyyy" //Your New Date format as per requirement change it own
    let newDate = dateFormatter.string(from: date!) //pass Date here
    print(newDate) //New formatted Date string

Результат: -

2017-01-11 00:07:00 +0000
Jan 11, 2017

Экран вывода.

Ответ 2

func GetDateFromString(DateStr: String)-> Date
{
    let calendar = NSCalendar(identifier: NSCalendar.Identifier.gregorian)
    let DateArray = DateStr.components(separatedBy: "/")
    let components = NSDateComponents()
    components.year = Int(DateArray[2])!
    components.month = Int(DateArray[1])!
    components.day = Int(DateArray[0])!
    components.timeZone = TimeZone(abbreviation: "GMT+0:00")
    let date = calendar?.date(from: components as DateComponents)

    return date!
}

//Вход: "23/02/2017"

//Выход: 2017-02-23 18:30:00 +0000