解决方法
第一部分“573465600000”是自Unix时代以来的时间
以毫秒为单位,第二部分“-0800”是时区
规格.
以毫秒为单位,第二部分“-0800”是时区
规格.
这是对Parsing JSON (date) to 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") }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。