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
(或实例化新的日期格式化程序)非常昂贵,因此尽可能避免在循环中进行设置。在这种情况下,只需在循环之前设置一次格式字符串,就可以了。