我正在使用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。
现在我该如何识别日期或时间戳?
答案 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小时。