如何将日期字符串数组转换为日期对象数组,Swift
How to convert an array of date strings to an array of date objects, Swift
查看了类似的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]
我尝试遍历日期字符串数组,但出现此错误:
"fatal error: unexpectedly found nil while unwrapping an Optional value"
所以我尝试了可选绑定但没有成功。请告诉我哪里可能出错。
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 语句打印 "Unable to convert to date object"
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")
}
}
在第二种情况下,你强制包装非可选值,没有必要,你正在用未声明为实例 属性 的 dateObjects var
编写自己,你也可以只需使用 flatMap
来减少代码并从 String
.
数组创建 Date
数组
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let dateObjects = dateStrings.flatMap { dateFormatter.date(from: [=10=]) }
试试这个:日期对象是局部变量,所以删除 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)
只需将自己从 dateObjects
中删除。
dateObjects
是局部变量。所以不要将 self 与 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!)
}
试试这个..
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]))
}
我所做的是映射数组并将每个项目变成一个新的 Date
对象。
let dateObjects = _.map(dateStrings, (dateString) => new Date(dateString)
就这么简单。在我的例子中,我试图将日期与另一个日期数组进行比较,所以在执行 new Date(dateString)
之后,我通过执行
将它们转换回 ISOString
let dateObjects = _.map(dateStrings, (dateString) => new Date(dateString).toISOString()
注:
您不需要使用 _.map
,您可以使用 .map
查看了类似的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]
我尝试遍历日期字符串数组,但出现此错误:
"fatal error: unexpectedly found nil while unwrapping an Optional value"
所以我尝试了可选绑定但没有成功。请告诉我哪里可能出错。
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 语句打印 "Unable to convert to date object"
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")
}
}
在第二种情况下,你强制包装非可选值,没有必要,你正在用未声明为实例 属性 的 dateObjects var
编写自己,你也可以只需使用 flatMap
来减少代码并从 String
.
Date
数组
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let dateObjects = dateStrings.flatMap { dateFormatter.date(from: [=10=]) }
试试这个:日期对象是局部变量,所以删除 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)
只需将自己从 dateObjects
中删除。
dateObjects
是局部变量。所以不要将 self 与 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!)
}
试试这个..
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]))
}
我所做的是映射数组并将每个项目变成一个新的 Date
对象。
let dateObjects = _.map(dateStrings, (dateString) => new Date(dateString)
就这么简单。在我的例子中,我试图将日期与另一个日期数组进行比较,所以在执行 new Date(dateString)
之后,我通过执行
let dateObjects = _.map(dateStrings, (dateString) => new Date(dateString).toISOString()
注:
您不需要使用 _.map
,您可以使用 .map