Swift3 如何将数组字符串转换为日期swift 3
我有一个数组,Swift3 如何将数组字符串转换为日期swift 3,swift3,nsdateformatter,Swift3,Nsdateformatter,我有一个数组,calendarFromDateArr,如下所示: ["2017-10-30T07:41:00", "2017-10-30T11:23:00", "2017-10-30T11:48:00", "2017-11-10T00:00:00", "2017-11-13T19:43:00", "2017-12-01T00:00:00", "2017-12-31T00:00:00"] 我正在使用此代码,但是dateObjects是nil let dateFormatter = DateFor
calendarFromDateArr
,如下所示:
["2017-10-30T07:41:00", "2017-10-30T11:23:00", "2017-10-30T11:48:00", "2017-11-10T00:00:00", "2017-11-13T19:43:00", "2017-12-01T00:00:00", "2017-12-31T00:00:00"]
我正在使用此代码,但是dateObjects
是nil
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let dateObjects = self.calendarFromDateArr2.flatMap { dateFormatter.date(from: $0) }
print(dateObjects)
var dateObjects = [Date]()
let dateFormatter = DateFormatter()
for date in self.calendarFromDateArr2 {
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
let dateObject = dateFormatter.date(from: date)
dateObjects.append(dateObject!)
print(dateObjects)
}
我也在使用这段代码,但数据是
nil
因为您的日期格式字符串是错误的,您的日期字符串中没有区域(Z代表时区:)
这里的示例非常好:
let dates = ["2017-10-30T07:41:00", "2017-10-30T11:23:00", "2017-10-30T11:48:00", "2017-11-10T00:00:00", "2017-11-13T19:43:00", "2017-12-01T00:00:00", "2017-12-31T00:00:00"]
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let dateObjects = dates.flatMap { dateFormatter.date(from: $0) }
print(dateObjects)
输出:
[2017-10-30 07:41:00 +0000, 2017-10-30 11:23:00 +0000, 2017-10-30 11:48:00 +0000, 2017-11-10 00:00:00 +0000, 2017-11-13 19:43:00 +0000, 2017-12-01 00:00:00 +0000, 2017-12-31 00:00:00 +0000]
因为您的dateFormat字符串是错误的,所以您的日期字符串中没有区域(Z代表时区:) 这里的示例非常好:
let dates = ["2017-10-30T07:41:00", "2017-10-30T11:23:00", "2017-10-30T11:48:00", "2017-11-10T00:00:00", "2017-11-13T19:43:00", "2017-12-01T00:00:00", "2017-12-31T00:00:00"]
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let dateObjects = dates.flatMap { dateFormatter.date(from: $0) }
print(dateObjects)
输出:
[2017-10-30 07:41:00 +0000, 2017-10-30 11:23:00 +0000, 2017-10-30 11:48:00 +0000, 2017-11-10 00:00:00 +0000, 2017-11-13 19:43:00 +0000, 2017-12-01 00:00:00 +0000, 2017-12-31 00:00:00 +0000]
除了删除
Z
和设置时区
属性外,正如cldrr在下面指出的那样,还将locale
设置为en_US_POSIX
,例如dateFormatter.locale=locale(标识符:“en_US_POSIX”)
,同样,在你问题的后半部分,避免在循环内设置dateFormat
。设置dateFormat
(或实例化新的日期格式化程序)非常昂贵,因此尽可能避免在循环中进行设置。在这种情况下,只需在循环之前设置一次格式字符串,您就可以进入黄金状态。除了删除Z
并设置timeZone
属性外,正如cldrr在下面指出的,还可以根据将locale
设置为en_US_POSIX
,例如dateFormatter.locale=locale(标识符:“en_US_POSIX”)
,不相关,在问题的后半部分,避免在循环中设置dateFormat
。设置dateFormat
(或实例化新的日期格式化程序)非常昂贵,因此尽可能避免在循环中进行设置。在这种情况下,只需在循环之前设置一次格式字符串,就可以了。