swift – 将时间戳字符串与epochal时间和时区转换为NSDate

swift – 将时间戳字符串与epochal时间和时区转换为NSDate,第1张

概述我有以下格式的字符串 "/Date(573465600000-0800)/" 如何将其转换为常规NSDate对象? 第一部分“573465600000”是自Unix时代以来的时间 以毫秒为单位,第二部分“-0800”是时区 规格. 这是对Parsing JSON (date) to Swift的略微修改 其中还包括时区部分: extension NSDate { convenience i 我有以下格式的字符串

"/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所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1012674.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-22
下一篇2022-05-22

发表评论

登录后才能评论

评论列表(0条)

    保存