如何将日期字符串数组转换为日期对象数组,Swift

use*_*776 0 nsdateformatter swift swift3

看了类似的SO问题,发现在Swift中没有答案,有很多答案专门用于日期格式化但不与迭代结合.

我有一个日期字符串数组,如下所示:

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"]
Run Code Online (Sandbox Code Playgroud)

我想将它们转换为如下所示的本地日期对象数组

var dateObjects = [2016-12-22 21:30:00 +0530, 2016-12-22 21:45:00 +0530, 2016-12-22 22:00:00 +0530]
Run Code Online (Sandbox Code Playgroud)

我已经尝试迭代日期字符串数组但我收到此错误:

"致命错误:在展开Optional值时意外发现nil"

所以我尝试使用可选绑定但没有成功.请告诉我可能出错的地方.

var dateObjects = [Date]()
let dateFormatter = DateFormatter()
for date in dateStrings{
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
    let dateObject = dateFormatter.date(from: date)
    self.dateObjects.append(dateObject!)  // ERROR LINE
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用可选绑定时,它通过else语句打印"无法转换为日期对象"

for date in dateStrings{
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
    if let dateObject = dateFormatter.date(from: date){
        self.dateObjects.append(dateObject!)  // ERROR LINE
    }
    else{
        print("Unable to convert to date object")
    }
}
Run Code Online (Sandbox Code Playgroud)

Nir*_*v D 7

在第二种情况下,你强制包装非可选值,不需要它,并且你正在使用var未声明为实例属性的dateObjects编写self ,也可以简单地flatMap用来减少代码并Date从数组中创建数组String.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let dateObjects = dateStrings.flatMap { dateFormatter.date(from: $0) }
Run Code Online (Sandbox Code Playgroud)