在swift 3中将字符串转换为DATE类型

Pao*_*Gdf 29 date ios swift3 xcode8

我有这个结构:

struct message {

  var id: String = "0"
  var text: String = ""
  var date: Date!
  var status: String = "" 
}
Run Code Online (Sandbox Code Playgroud)

我必须从dbase加载这个结构,它String也以格式导出date.所以我写这段代码转换StringDate类型:

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)!
Run Code Online (Sandbox Code Playgroud)

我将它加载到结构中:

message(id: elemMessage["id"] as! String, text: elemMessage["text"] as! String, date: dataDate as! Date, status: elemMessage["status"] as! String)
Run Code Online (Sandbox Code Playgroud)

但是我有这个警告:"从不Date相关的类型转换Date总是失败"

因此,如果我运行应用程序,它将失败.

我怎样才能解决这个问题,date结构中的var必须是Date类型.

谢谢.

Ana*_*mje 81

您可以将字符串日期转换为日期/ NSDate,如下所示: -

Swift 3.2Swift 4.2

字符串到日期

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-mm-yyyy" //Your date format
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00") //Current time zone
//according to date format your date string
guard let date = dateFormatter.date(from: "01-01-2017") else {
    fatalError()
}
print(date) //Convert String to Date
Run Code Online (Sandbox Code Playgroud)

字符串的日期

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
Run Code Online (Sandbox Code Playgroud)

输出: -

2017-01-11 00:07:00 +0000
Jan 11, 2017
Run Code Online (Sandbox Code Playgroud)

输出屏幕.

  • 不应该'mm`是大写? (4认同)
  • 不工作....转换为日期后日期变得不正确 (2认同)

小智 14

Swift 4 ISO

let dateFormatter = DateFormatter()
    dateFormatter.locale = Locale(identifier: "en_US_POSIX")
    dateFormatter.timeZone = TimeZone.autoupdatingCurrent
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
Run Code Online (Sandbox Code Playgroud)


Jee*_*dhi 5

 func getDateFromString(dateStr: String) -> (date: Date?,conversion: Bool)
{
    let calendar = Calendar(identifier: Calendar.Identifier.gregorian)
    let dateComponentArray = dateStr.components(separatedBy: "/")

    if dateComponentArray.count == 3 {
        var components = DateComponents()
        components.year = Int(dateComponentArray[2])
        components.month = Int(dateComponentArray[1])
        components.day = Int(dateComponentArray[0])
        components.timeZone = TimeZone(abbreviation: "GMT+0:00")
        guard let date = calendar.date(from: components) else {
            return (nil , false)
        }

        return (date,true)
    } else {
        return (nil,false)
    }

}
Run Code Online (Sandbox Code Playgroud)

//输入:“ 23/02/2017”

//输出:(2017-02-23 18:30:00 +0000,true)