Dateformatter返回nil

时间:2016-05-19 01:53:00

标签: ios swift nsdate nsdateformatter

下面的功能适用于游乐场,但当我在我的应用中运行它时出于某种原因,datefDate会返回nil。我在这里找不到什么东西?

extension NSDate{
 func APIformatDate(dateString: String)->String{
     p   let dateFormatter = NSDateFormatter()
        let date = dateFormatter.dateFromString(dateString)
        dateFormatter.dateFormat = "dd-MMM"
        let fDate = dateFormatter.stringFromDate(date!)
        return fDate
    }

}
let a = NSDate().APIformatDate("2025-12-18T01:30:00Z")

在Playground中工作= http://swiftlang.ng.bluemix.net/#/repl/db3df0ceebe0bc9061c9b200606b59ce93b43c7889f1aa056f4d7afb160beac9

1 个答案:

答案 0 :(得分:0)

对我来说,它并不适用于Xcode 7.3.1下的iOS游乐场。由于date"2025-12-18T01:30:00Z"使用的默认格式不匹配,因此尝试解包NSDateFormatter时崩溃,因此dateFromString返回nil。道德:不要相信IBM Swift Sandbox的行为与iOS或OS X完全相同。

此外,由于APIformatDate没有引用self,因此它应该是classstatic方法,或String上的方法,所以你不必创建一个NSDate对象来调用它。

同样 2 ,创建NSDateFormatter是很昂贵的,所以如果您经常调用此函数,您应该为每种格式创建一个格式化程序并保留它们周围。

extension NSDate {

    static func apiFormatted(iso8601String string: String) -> String {
        return apiFormatter.stringFromDate(iso8601Formatter.dateFromString(string)!)
    }

    private static let iso8601Formatter: NSDateFormatter = {
        let formatter = NSDateFormatter()
        formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
        return formatter
    }()

    private static let apiFormatter: NSDateFormatter = {
        let parser = NSDateFormatter()
        parser.dateFormat = "dd-MMM"
        return parser
    }()

}