如何在Swifty json中检查value是否为datestring或double?

时间:2017-08-17 14:45:17

标签: ios json swift swifty-json

我正在使用Swifty json解析json。现在我有一个"create_date"的密钥,它可以有一个时间戳&以及像“2017-08-17 20:00:00”这样的日期字符串。现在我不确定它是字符串日期还是时间戳。我使用下面的代码来解析这个

if  let timeInterval = dic?["created_at"].doubleValue  {
    print("timeinterval is \(timeInterval)")
    date1 = NSDate(timeIntervalSince1970: (timeInterval / 1000))
    date = self.getStrDateFromDate(dob: date1!) as String
}

如果使用dict["create_date"].doubleValue,那么如果它是一个字符串日期那么它将返回2017年&在时间戳的情况下,它返回一些时间戳为15383673563465。

现在我该如何识别日期或时间戳?

2 个答案:

答案 0 :(得分:1)

使用可选绑定,并使用SwiftyJSON的Double属性将值转换为double。如果向下转换成功,则从Date创建字符串,否则直接使用日期字符串。

let dateString : String
if let timeInterval = dic?["created_at"].double  {
    print("timeinterval is \(timeInterval)")
    date1 = Date(timeIntervalSince1970: timeInterval / 1000)
    dateString = self.getStrDateFromDate(dob: date1!) as String
} else {
    dateString = dic?["created_at"].stringValue
}

旁注:

为什么你(桥)将结果转换为字符串(来自getStrDateFromDate),这应该是一个字符串?

答案 1 :(得分:0)

我会尝试使用您可能的日期字符串格式的DateFormatter,然后尝试将其转换为double。或者反之亦然。订单真的不重要,虽然检查双重优惠可能稍微便宜一些。

import Foundation

func convertDate(dateString:String) -> Date? {
  // try `Double`
  if let timestamp = Double(dateString) {
    return Date(timeIntervalSince1970: timestamp)
  }

  // try `DateFormatter`
  let formatter = DateFormatter()
  formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  if let date = formatter.date(from: dateString) {
    return date
  }

  // give up
  return nil
}

let dateString1 = String(Date().timeIntervalSince1970)
let dateString2 = "2017-08-17 20:00:00"
let dateString3 = "something"

print(convertDate(dateString: dateString1) ?? "unknown")
print(convertDate(dateString: dateString2) ?? "unknown")
print(convertDate(dateString: dateString3) ?? "unknown")

// 2017-08-17 15:15:27 +0000
// 2017-08-18 00:00:00 +0000
// unknown

请注意description的默认Date使用GMT。在我的情况下它关闭了4个小时,这就是为什么显示的时间与我输入的时间相差4小时。