将JSON(日期)解析为Swift

艾瑞莎·弗雷塔斯(Aretha Freitas)

我在Swift的应用程序中有一个返回JSON,并且有一个返回日期的字段。当我引用此数据时,代码会给我类似“ / Date(1420420409680)/”的信息。如何将其转换为NSDate?请在Swift中用Objective-C测试示例,但没有成功。

马丁·R

这看起来与Microsoft的ASP.NET AJAX使用的日期的JSON编码非常相似,JavaScript和.NET中的JavaScript对象符号表示法(JSON)对此进行了描述

例如,Microsoft的ASP.NET AJAX既不使用所描述的约定。而是将.NET DateTime值编码为JSON字符串,其中字符串的内容为/ Date(ticks)/,而ticks代表自历元(UTC)以来的毫秒数。因此,1989年11月29日上午4:55:30,以UTC编码为“ \ / Date(628318530718)\ /”。

唯一的区别是您具有格式,/Date(ticks)/而没有\/Date(ticks)\/

您必须提取括号之间的数字。将其除以1000得到自1970年1月1日以来的秒数。

以下代码显示了如何完成此操作。它被实现为“失败的便利初始化程序”,用于NSDate

extension NSDate {
    convenience init?(jsonDate: String) {

        let prefix = "/Date("
        let suffix = ")/"
        // Check for correct format:
        if jsonDate.hasPrefix(prefix) && jsonDate.hasSuffix(suffix) {
            // Extract the number as a string:
            let from = jsonDate.startIndex.advancedBy(prefix.characters.count)
            let to = jsonDate.endIndex.advancedBy(-suffix.characters.count)
            // Convert milliseconds to double
            guard let milliSeconds = Double(jsonDate[from ..< to]) else {
                return nil
            }
            // Create NSDate with this UNIX timestamp
            self.init(timeIntervalSince1970: milliSeconds/1000.0)
        } else {
            return nil
        }
    }
}

用法示例(带有日期字符串):

if let theDate = NSDate(jsonDate: "/Date(1420420409680)/") {
    print(theDate)
} else {
    print("wrong format")
}

这给出了输出

2015-01-05 01:13:29 +0000

Swift 3(Xcode 8)更新:

extension Date {
    init?(jsonDate: String) {

        let prefix = "/Date("
        let suffix = ")/"

        // Check for correct format:
        guard jsonDate.hasPrefix(prefix) && jsonDate.hasSuffix(suffix) else { return nil }

        // Extract the number as a string:
        let from = jsonDate.index(jsonDate.startIndex, offsetBy: prefix.characters.count)
        let to = jsonDate.index(jsonDate.endIndex, offsetBy: -suffix.characters.count)

        // Convert milliseconds to double
        guard let milliSeconds = Double(jsonDate[from ..< to]) else { return nil }

        // Create NSDate with this UNIX timestamp
        self.init(timeIntervalSince1970: milliSeconds/1000.0)
    }
}

例子:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将日期 JSON 对象解析为 Java

来自分类Dev

将JSON数组解析为Swift数组

来自分类Dev

将 Swift 字符串解析为日期,然后是组件

来自分类Dev

如何将json对象日期解析为Android

来自分类Dev

将Date解析为MS JSON日期格式的Java方法

来自分类Dev

将日期从json解析为对象时出错

来自分类Dev

python将json日期解析为iso标准

来自分类Dev

将javascript日期解析为golang日期

来自分类Dev

将Json数组中的对象解析为字典Swift

来自分类Dev

Swift 2将Json解析为可选数组

来自分类Dev

Alamofire,Swift 2.0,SwiftyJSON:将响应主体解析为JSON

来自分类Dev

在Swift 3中将JSON对象解析为NSArray

来自分类Dev

将 Swift 中的 JSON 解析为类数组

来自分类Dev

Swift 4 iOS 将 JSON 解析为集合视图

来自分类Dev

如何将JSON格式的日期字符串解析为日期格式

来自分类Dev

将整数值解析为日期时间

来自分类Dev

将RSS发布日期解析为DateTime

来自分类Dev

无法将String解析为日期格式

来自分类Dev

将python中的日期解析为datetime

来自分类Dev

将日期从sqlserver解析为C#

来自分类Dev

将日期解析为utc unixtime

来自分类Dev

将 mysql 日期解析为 ZonedDateTime

来自分类Dev

将JSON解析为Hashtable

来自分类Dev

将HashMap解析为Json

来自分类Dev

将JSON解析为子集

来自分类Dev

将Json解析为String

来自分类Dev

将JSON解析为对象

来自分类Dev

将 JSON 解析为数组

来自分类Dev

将 JSON 解析为对象