在iOS Swift Project中从"2015-01-17T20:00Z"创建NSDate

Kyl*_*yle 0 nsdateformatter ios swift swift-playground

我与此格式返回datetime一些JSON数据工作:"2015-01-17T20:00Z"当我试图把它变成一个NSDate对象,我总是留下为零.我已经通过几个教程和答案在这里对SO阅读,苹果的NSDate/NSDateFormatter /日期格式文档,和ping通了几个IRC频道.

任何人都可以告诉我我做错了什么,可能的解决方法吗?

我在Swift游乐场中失败的代码:

let dateString = "2015-01-17T20:00Z"
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-ddThh:mmZ"
let d = dateStringFormatter.dateFromString(dateString)
println(d)
Run Code Online (Sandbox Code Playgroud)

输出: "Optional(2015-01-17 06:00:00 +0000)"

在同一个Swift游乐场中工作代码:

let dateString = "2015-01-17"
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyy-MM-dd"
let d = dateStringFormatter.dateFromString(dateString)
println(d)
Run Code Online (Sandbox Code Playgroud)

输出: "nil"

Leo*_*bus 5

您必须将其格式化为"yyyy-MM-dd \'T \'HH:mmZ".您也可以使用此扩展程序尝试:

extension String {
    func toDateFormattedWith(format:String)-> NSDate {
        let formatter = NSDateFormatter()
        formatter.dateFormat = format
        return formatter.dateFromString(self)!
    }
}
Run Code Online (Sandbox Code Playgroud)

正如rmaddy所提到的,你的日期是UTC格式,所以我们只会逃避"T",如下所示:

"2015-01-17T20:00Z".toDateFormattedWith("yyyy-MM-dd\'T\'HH:mmZ")  // "Jan 17, 2015, 6:00 PM"
Run Code Online (Sandbox Code Playgroud)

如果你需要一些参考格式的日期,你可以使用这个;

在此输入图像描述

  • `Z`格式说明符表示该字符串应具有时区值.碰巧的是,日期字符串指定"Z"的时区,即"UTC".如果引用格式中的"Z",则忽略日期字符串中的"Z",并将日期字符串视为本地时间,而不是UTC时间. (2认同)