查看类似的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"]
我想将它们转换为本地日期对象的数组,如下所示
var dateObjects = [2016-12-22 21:30:00 +0530, 2016-12-22 21:45:00 +0530, 2016-12-22 22:00:00 +0530]
我已经尝试迭代日期字符串数组但是我收到了这个错误:
"致命错误:在展开可选值时意外发现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
}
当我尝试使用可选绑定时,它会通过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")
}
}
答案 0 :(得分:6)
在第二种情况下,你强制包装非可选值而不需要它,并且你正在使用未声明为实例属性的dateObjects bb
编写self,你也可以简单地使用{{1}从var
数组中减少代码并创建flatMap
数组。
Date
答案 1 :(得分:1)
试试这个:date对象是局部变量,所以删除self。如果你想使用self,那就把它变成全局
let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"]
var dateObjects = [Date]()
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
for date in dateStrings{
let dateObject = dateFormatter.date(from: date)
dateObjects.append(dateObject!)
}
print(dateObjects)
答案 2 :(得分:1)
只需从dateObjects
删除自己。
dateObjects
是局部变量。所以不要将自己与dateObjects
一起使用。
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)
dateObjects.append(dateObject!)
}
答案 3 :(得分:1)
我所做的是,我在数组上进行了映射,并将每一项变成一个新的Date
对象。
let dateObjects = _.map(dateStrings, (dateString) => new Date(dateString)
就这么简单。就我而言,我试图将日期与另一个日期数组进行比较,因此在执行new Date(dateString)
之后,我通过执行
let dateObjects = _.map(dateStrings, (dateString) => new Date(dateString).toISOString()
注意:
您不需要使用_.map
,只需使用.map
答案 4 :(得分:0)
试试这个..
Swift 3
let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"]
func convertDate(str: String) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssxxx"
let dateObject = dateFormatter.date(from: str)
return(dateObject!)
}
var stringDates : [Date] = []
for date in dateStrings {
stringDates.append(convertDate(str: dateStrings[0]))
}