Ios 使用NSDateFormatter进行Swift日期格式化

Ios 使用NSDateFormatter进行Swift日期格式化,ios,swift,nsdateformatter,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

我有一个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)
然后把这个日期转换成新的格式,再转换成字符串。但是当我试图打印格式化的dateShow变量时,它的值是零

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

多谢各位

根据我尝试过的答案:

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)
在得到它之后,很容易将其转换为预期的格式


非常感谢你的每一个想法

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

我希望这对你有帮助

您需要将从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
可能包含类似

可选(“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'HH:MM:ss.AAZZZZZ

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

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

我首先要检查
v[“feedDate”]
是否不是可选的,因为在本例中
v[“feedDate”].description
可能包含类似

可选(“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'HH:MM:ss.AAZZZZZ


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

这看起来是正确的答案。您需要2个日期格式化程序,1个用于将原始字符串格式解析为NSDate,第二个用于将日期转换为输出格式。我看到的唯一一件可能需要更改的事情是在输出格式中的日期和时间之间添加一个破折号。(但我不是日期格式字符串方面的专家。)@Duncac,我对点而不是破折号感到困惑,但我在这里测试了它,效果很好。OP说他/她希望最终输出像“2015.05.10-18:39”。我将输出格式字符串设置为
yyyy.MM.dd-HH:MM
(日期部分和时间部分之间有一个破折号。)@duncac我错过了那个破折号,但我现在更新了它,谢谢你告诉我@solarenqu这可能意味着很多事情,首先确保您有一个名为“feedDate”的节点,其次确保v[“feedDate”]。description返回一个值,最后确保该值采用您尝试转换的格式。使用println添加一些日志以查看您实际收到的内容,并将其发布在此处,以便我们可以帮助您找到最佳解决方案。这看起来是正确的答案。您需要2个日期格式化程序,1个用于将原始字符串格式解析为NSDate,第二个用于将日期转换为输出格式。我看到的唯一一件可能需要更改的事情是在输出格式中的日期和时间之间添加一个破折号。(但我不是日期格式字符串方面的专家。)@Duncac,我对点而不是破折号感到困惑,但我在这里测试了它,效果很好。OP说他/她希望最终输出像“2015.05.10-18:39”。我将输出格式字符串设置为
yyyy.MM.dd-HH:MM
(日期部分和时间部分之间有一个破折号。)@duncac我错过了那个破折号,但我现在更新了它,谢谢你告诉我@solarenqu这可能意味着很多事情,首先确保您有一个名为“feedDate”的节点,其次确保v[“feedDate”]。description返回一个值,最后确保该值采用您尝试转换的格式。使用println添加一些日志以查看您实际收到的内容,并将其发布到此处,以便我们可以帮助您找到最佳解决方案我没有NSdate对象。或者我不知道我认为v[“feedDate”]的返回值。说明是StringYou有NSdate对象。它被称为dateShow。检查
v[“feedDate”]的值。说明
。例如,使用println。如果它是可选的,则无法将其描述传递给格式化程序。首先将其展开为规则字符串。如果我这样做:println(dateShow)它正在打印