NSDateFormatter.dateFromString返回nil(“yyyy-MM-dd”返回NSDate)

时间:2015-09-22 14:50:38

标签: string swift nsdate nsdateformatter nslocale

遇到NSDateFormatter问题。

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

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"

我已经探讨了与此类似的其他问题,但仍然无法解决此问题。 任何和所有的帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

您可以设置

dateFormatter.lenient = true

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

答案 1 :(得分:1)

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"

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