使用NSDateFormatter进行Swift日期格式化

时间:2015-05-27 04:18:49

标签: ios swift nsdateformatter

我有一个包含数据库日期的json对象:

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

showDateRaw变量的类型是String,在解析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)

然后以某种方式将此日期转换为新格式,然后将其转换为String。但是当我尝试打印格式化的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方法,该方法返回可选的NSDate。

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

获得它后,很容易转换为预期的格式。

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

2 个答案:

答案 0 :(得分:3)

您需要将从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)

我希望能帮到你!

答案 1 :(得分:3)

  

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 ...

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

  

这就是它的打印:2015-05-27T12:51:28.27 + 02:00但如果我这样做   方式:println(v [" feedDate"]。asDate)它打印出来:   可选(2015-05-23 14:57:43 +0000)我使用这个repo进行解析   JSON

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

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

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