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)
在第二种情况下,你强制包装非可选值,不需要它,并且你正在使用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)