将时间戳转换成NSDate swift?

在Objective-C中有很多关于这个问题的文章,但是在Swift编程语言中我找不到任何可靠的答案。

我有以下格式的string

"/Date(573465600000-0800)/" 

我如何将其转换为常规的NSDate对象?

第一部分“573465600000”是Unix时代以来的时间(毫秒) ,第二部分“-0800”是时区规范。

这是一个parsingJSON(date)Swift的轻微修改,它也覆盖了时区部分:

 extension NSDate { convenience init?(jsonDate: String) { let prefix = "/Date(" let suffix = ")/" let scanner = NSScanner(string: jsonDate) // Check prefix: if scanner.scanString(prefix, intoString: nil) { // Read milliseconds part: var milliseconds : Int64 = 0 if scanner.scanLongLong(&milliseconds) { // Milliseconds to seconds: var timeStamp = NSTimeInterval(milliseconds)/1000.0 // Read optional timezone part: var timeZoneOffset : Int = 0 if scanner.scanInteger(&timeZoneOffset) { let hours = timeZoneOffset / 100 let minutes = timeZoneOffset % 100 // Adjust timestamp according to timezone: timeStamp += NSTimeInterval(3600 * hours + 60 * minutes) } // Check suffix: if scanner.scanString(suffix, intoString: nil) { // Success! Create NSDate and return. self.init(timeIntervalSince1970: timeStamp) return } } } // Wrong format, return nil. (The compiler requires us to // do an initialization first.) self.init(timeIntervalSince1970: 0) return nil } } 

例:

 if let theDate = NSDate(jsonDate: "/Date(573465600000-0800)/") { println(theDate) } else { println("wrong format") } 

输出:

 1988-03-04 00:00:00 +0000 

Swift 3(Xcode 8)的更新:

 extension Date { init?(jsonDate: String) { let prefix = "/Date(" let suffix = ")/" let scanner = Scanner(string: jsonDate) // Check prefix: guard scanner.scanString(prefix, into: nil) else { return nil } // Read milliseconds part: var milliseconds : Int64 = 0 guard scanner.scanInt64(&milliseconds) else { return nil } // Milliseconds to seconds: var timeStamp = TimeInterval(milliseconds)/1000.0 // Read optional timezone part: var timeZoneOffset : Int = 0 if scanner.scanInt(&timeZoneOffset) { let hours = timeZoneOffset / 100 let minutes = timeZoneOffset % 100 // Adjust timestamp according to timezone: timeStamp += TimeInterval(3600 * hours + 60 * minutes) } // Check suffix: guard scanner.scanString(suffix, into: nil) else { return nil } // Success! Create NSDate and return. self.init(timeIntervalSince1970: timeStamp) } } 

例:

 if let theDate = Date(jsonDate: "/Date(573465600000-0800)/") { print(theDate) } else { print("wrong format") } 

让myTimeStamp =“1463689800000.0”

  let dateTimeStamp = NSDate(timeIntervalSince1970:Double(myTimeStamp)!/1000) //UTC time let dateFormatter = NSDateFormatter() dateFormatter.timeZone = NSTimeZone.localTimeZone() //Edit dateFormatter.dateFormat = "yyyy-MM-dd" dateFormatter.dateStyle = NSDateFormatterStyle.FullStyle dateFormatter.timeStyle = NSDateFormatterStyle.ShortStyle let strDateSelect = dateFormatter.stringFromDate(dateTimeStamp) print(strDateSelect) //Local time let dateFormatter2 = NSDateFormatter() dateFormatter2.timeZone = NSTimeZone.localTimeZone() dateFormatter2.dateFormat = "yyyy-MM-dd" let date3 = dateFormatter.dateFromString(strDateSelect) datepicker.date = date3! 
 var date:NSDate = NSDate(timeIntervalSince1970: timeInterval)