NSDateFormatter.dateFromString returns 无("yyyy-MM-dd" 到 NSDate)

NSDateFormatter.dateFromString returns nil ("yyyy-MM-dd" to NSDate)

NSDateFormatter 有问题。

所以我有一个格式为 "yyyy-MM-dd" 的日期字符串,例如 2015-09-22。 但是,当我将其传递给 NSDateFormatter.dateFromString 时,方法 returns 为零。我的代码如下:

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
let dateAsNSDate = dateFormatter.dateFromString(payload.objectForKey("messageExpiry") as! String)

从调试器控制台在此代码上方的断点处:

po payload.objectForKey("messageExpiry") as! String

"2015-09-31"

我已经探索了其他类似的问题,但我仍然无法解决这个问题。 任何帮助将不胜感激。

var str = "2015-09-29"

let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
let dateAsNSDate = dateFormatter.dateFromString(str)
print(dateAsNSDate)
// -> "Optional(2015-09-29 07:00:00 +0000)\n"

所以这似乎可行。看起来你一个月的天数太多了,所以这不是一个有效的日期! :)

您的代码正确并产生了预期的结果,例如为了 输入字符串“2015-09-22”。然而,对于输入“2015-09-31”, nil 被返回,因为那是一个无效的日期:9 月 只有 30 天。

您可以设置

dateFormatter.lenient = true

然后“2015-09-31”被接受并被视为“2015-10-01”。 但是你应该先检查一下为什么 payload.objectForKey("messageExpiry") returns 无效日期。