Swift 使用 NSDateFormatter 格式化日期

Swift date formatting with NSDateFormatter

我有一个 json 对象,其中包含来自数据库的日期:

var showDateRaw = v["feedDate"].description
println(showDateRaw)

showDateRaw 变量的类型是字符串,在解析 json 对象后看起来像这样: 2015-05-10T18:39:55+02:00

我想将它转换成这样:2015.05.10 - 18:39

首先,我尝试使用 NSDateFormatter 转换为 NSDate:

 var formatter : NSDateFormatter = NSDateFormatter()
    formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
    let dateShow = formatter.dateFromString(v["feedDate"].description)
    println(dateShow)

然后以某种方式将此日期转换为新格式,然后将其转换为字符串。但是当我尝试打印格式化的 dateShow 变量时,它的值为 nil..

谁能帮我把这个字符串日期转换成预期的格式?

非常感谢!

根据我试过的答案:

var formatter = NSDateFormatter()
            formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
            let dateShow = formatter.dateFromString(v["feedDate"].description)
            var finalFormatter = NSDateFormatter()
            finalFormatter.dateFormat = "yyyy.MM.dd HH:mm"
            let finalDate = finalFormatter.stringFromDate(dateShow!)

但它抛出错误:

致命错误:在展开可选值时意外发现 nil

你知道这是为什么吗? 谢谢..

更新:

这是解决方案,我的 json 解析器 api 有一个 .asDate 方法,该方法 return 带有可选的 NSDate。

let dateShow : NSDate? = v["feedDate"].asDate
            var finalFormatter = NSDateFormatter()
            finalFormatter.dateFormat = "yyyy.MM.dd - HH:mm"
            let finalDate = finalFormatter.stringFromDate(dateShow!)
            println(finalDate)

得到后,很容易转换成预期的格式。

非常感谢你的每一个想法!

您需要将从 JSON 检索到的日期重新格式化为您要使用的格式:

var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'"
let dateShow = formatter.dateFromString(v["feedDate"].description)
var finalFormatter = NSDateFormatter()
finalFormatter.dateFormat = "yyyy.MM.dd - HH:mm"
let finalDate = finalFormatter.stringFromDate(dateShow)

希望对你有帮助!

let dateShow = formatter.dateFromString(v["feedDate"].description)

我会首先检查 v["feedDate"] 是否不是可选的,因为在这种情况下 v["feedDate"].description 可能包含

这样的字符串

Optional("2015-05-10T18:39:55+02:00") 而不是 2015-05-10T18:39:55+02:00

显然不会转换为 NSDate...

编辑:在您的原始 post 下,您提供了以下信息:

this is what it's print: 2015-05-27T12:51:28.27+02:00 but if i do this way: println(v["feedDate"].asDate) it's print this: Optional(2015-05-23 14:57:43 +0000) i'm using this repo for parsing json

您可以在 NSDateFormatter 中使用这种格式来解析它:

yyyy-MM-dd'T'HH:mm:ss.AAZZZZZ

看起来您正在使用的 API 实际上已经知道如何使用 asDate 方法为其创建日期。在任何情况下,如果您使用自己的格式化程序,请确保将正确的字符串传递给它,而不是对字符串的描述?