
"/Date(573465600000-0800)/"
如何将其转换为常规NSDate对象?
解决方法 第一部分“573465600000”是自Unix时代以来的时间以毫秒为单位,第二部分“-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")} 总结 以上是内存溢出为你收集整理的swift – 将时间戳字符串与epochal时间和时区转换为NSDate全部内容,希望文章能够帮你解决swift – 将时间戳字符串与epochal时间和时区转换为NSDate所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)