【问题标题】:how to get datetime from json in swift 3如何在swift 3中从json获取日期时间
【发布时间】:2018-02-23 16:59:26
【问题描述】:

我有一个关于使用 Alamofire 从 json(PHP) 获取日期时间格式的问题

PHP json 返回

"mydata="[{ "id" : "001", "now_in": { "日期": "2017-11-28 17:44:44.000000", “时区类型”:3, “时区”:“亚洲/克拉斯诺亚尔斯克” }, }]

我的代码

    var dataArray =  [[String:AnyObject]]() //Array of dictionary
//---------------------- get value from json -------------------------------
      Alamofire.request("http://111.72.4.81/SQL/Service.php").responseJSON { (responseData) -> Void in
            if((responseData.result.value) != nil) {
                let swiftyJsonVar = JSON(responseData.result.value!)

                if let resData = swiftyJsonVar["mydata"].arrayObject {
                    self.dataArray = resData as! [[String:AnyObject]]
                }

            }
        }
  //------------------- print array ----------------------------
  var dict = dataArray[indexPath.row]
  let keys = dict["now_in"]
  print(keys)

我需要格式

now_in = "2017-11-28 17:44:44.000000"

但输出是

可选({ 日期=“2017-11-28 17:44:44.000000”; timezone = "亚洲/克拉斯诺亚尔斯克"; “时区类型”= 3; })

【问题讨论】:

  • 您是否在从 Dictionary 获取正确值或在 Date 对象中解析它时遇到问题?
  • 是的,我需要从字典中获取日期时间
  • 您可以发布您从 PHP 服务收到的 JSON 吗?也许作为对您问题的编辑?
  • 什么意思?
  • 打印您的swiftyJsonVar 并在此处发布输出

标签: json swift3 datetime-format


【解决方案1】:

let dateString = dict["now_in"]!["date"]

会给你日期字符串。如果你想要 Date 对象,你可以使用

解析它
let format = "yyyy-MM-dd'T'HH:mm:ss"
let formatter = DateFormatter()
formatter.dateFormat = format
let date = formatter.date(from: dateString)

【讨论】:

  • 它适用于 "dict["now_in"]!["date"] as!String" 但转换为日期为零
  • 修复并测试了答案。
  • 我改成 format = "yyyy-MM-dd HH:mm:ss.S" 但它有可选的
  • 执行有条件的展开。当我拿到笔记本电脑时,我会编辑答案
  • 此日期格式将返回 nil。这不是 ISO8601 日期,不考虑小数秒。
【解决方案2】:

now_in 的值是另一个字典。您要查找的值的键是date

let dict = dataArray[indexPath.row]
if let dateInfo = dict["now_in"] as? [String:Any],
   let date = dateInfo["date"] as? String {
   print(date)
}

您可以使用DateFormatter 创建Date。日期格式为yyyy-MM-dd HH:mm:ss.S

【讨论】:

  • 如果让 dateInfo = dict["now_in"] as? [String:Any],让 date = dateInfo["date"] 为? String { let format = "yyyy-MM-dd HH:mm:ss.S" let formatter = DateFormatter() formatter.dateFormat = format let dates = formatter.date(from: dateString) print(dates) } 输出是可选的(2018-01-30 23:30:28 +0000)
  • 当然是可选的,因为date(from: 返回一个可选的。如果日期始终采用这种格式,您可以强制解开日期formatter.date(from: dateString)!
【解决方案3】:

谢谢@vadian 和 Huanid

按照你的建议,现在可以了

 let dateString = (dict["now_in"]! as! [String: AnyObject])["date"]! as! String
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss.SSS"
            dateFormatter.locale = Locale.init(identifier: "en_en")
            let dateObj = dateFormatter.date(from: dateString)
            dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ss"
            print("\(dateFormatter.string(from: dateObj!))")

【讨论】:

  • 我想明确一点,我没有建议[String: AnyObject](必须是[String:Any]),也没有建议强制解开字典值。
  • [String:Any] 它也可以,但是当我转换为日期时无法打开
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2017-04-25
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-09
相关资源
最近更新 更多