2014-10-29 132 views
4

我想将一个日期时间字符串从Django其他框架如: “2014-10-28T18:14:32.457”转换成一个Swift字符串。我运行下面的代码在操场,总是出现错误:NSDateFormatter总是返回零。

致命错误:意外发现零而展开的可选值

import Foundation 

var mydate = "2014-10-28T18:14:32.457" 
let formatter = NSDateFormatter() 
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" 
formatter.timeStyle = .ShortStyle 
formatter.dateStyle = .ShortStyle 
var parsedDateTimeString = formatter.dateFromString(mydate) 
formatter.stringFromDate(parsedDateTimeString!) 

我认为它是因为dateFromString总是返回零。但我不知道为什么它返回零。林非常确定我有dateFormat正确。我哪里错了?

回答

11

如果你正在设置dateFormat,那么你不应该设置timeStyledateStyle(他们将覆盖你设置的格式)。您可能还需要考虑使用可选的结合,而不是被迫展开,以使你的代码更安全一点:

var mydate = "2014-10-28T18:14:32.457" 
let formatter = NSDateFormatter() 
formatter.locale = NSLocale(localeIdentifier: "en_US_POSIX") 
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS" 
if let parsedDateTimeString = formatter.dateFromString(mydate) { 
    formatter.stringFromDate(parsedDateTimeString) 
} else { 
    println("Could not parse date") 
} 

运行在一个游乐场,看着在stringFromDate行的结果:

2014-10-28T18:14:32.457