如何阵列字符串转换成日期SWIFT 3

问题描述:

我有一个数组,calendarFromDateArr即如下:如何阵列字符串转换成日期SWIFT 3

["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"] 

我用这个代码,但dateObjectsnil

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

+0

除了除去了'Z'和设置'timeZone'属性,如下面cldrr所指出的,还设置'locale'到'en_US_POSIX',例如'dateFormatter.locale = Locale(identifier:“en_US_POSIX”)',依据[技术问答1480](https://developer.apple.com/library/content/qa/qa1480/_index.html)。 – Rob

+0

另外,在你的问题的后半部分,无关,避免在循环内设置'dateFormat'。设置'dateFormat'(或实例化新的日期格式化程序)非常昂贵,所以如果可以的话,避免在循环中执行。在这种情况下,只需在循环前设置一次格式化字符串,就可以了。 – Rob

因为你的日期格式字符串是错误的,你不必在你的日期字符串(的Z代表的时区:http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_Patterns)区域

这个例子在这里工作完全正常:

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]