2016-12-22 97 views
0

查看類似的SO問題,發現Swift中沒有答案,只有很多答案專門用於日期格式,但不能與迭代結合使用。如何將日期字符串數組轉換爲日期對象數組,Swift

我有日期字符串像下面的數組:

let dateStrings = ["2016-12-22T08:00:00-08:00", "2016-12-22T08:15:00-08:00", "2016-12-22T08:30:00-08:00"] 

我想將它們轉換爲本地dateObjects像下面

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"

所以我試着用可選綁定w沒有成功。請諮詢我可能會出錯的地方。

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") 
    } 
} 
+1

嘿,我跑了你的代碼,一切工作就好了。沒有錯誤。你確定這是導致錯誤的線? –

+0

有趣的是,你的代碼適用於我... –

+0

你不需要使用'self.dateObjects.append(dateObject!)'只使用'dateObjects.append(dateObject!)'它會工作 –

回答

6

在第二種情況下,你的力量包裹非可選值沒有必要的並且您正在使用未聲明爲實例屬性的dateObjects var編寫自己,也可以簡單地使用flatMap來減少代碼並從String數組創建數組Date

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 
let dateObjects = dateStrings.flatMap { dateFormatter.date(from: $0) } 
1

試試這個:date對象是局部變量,所以刪除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) 
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!) 
} 
0

試試這個..

斯威夫特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])) 
} 
+1

好的答案可以解釋問題是什麼,好的答案可以解釋他們的答案如何解決問題。僅有代碼的答案在這裏不受歡迎。 – rmaddy

相關問題