如何在 Swiftyjson 中检查值是日期字符串还是双精度值?
Posted
技术标签:
【中文标题】如何在 Swiftyjson 中检查值是日期字符串还是双精度值?【英文标题】:How to check if value is datestring or double in Swifty json? 【发布时间】:2017-08-17 14:45:17 【问题描述】:我正在使用 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 。
现在我如何确定是日期还是时间戳?
【问题讨论】:
只需在if let
的末尾添加一个类型转换。
如果你的 dict 是 JSON,那么你可以if let timeInterval = dic?["created_at"].string
如果是时间戳,我认为它也是一个字符串。如果它包含“-”,我已经添加了条件
对于该示例时间戳字符串,您可能必须除以 10000 而不是 1000。只是猜测,因为除以 10000 得出的日期时间为 2018 年 10 月 1 日 00:15 和除以 1000 为 2457 年 6 月 27 日 14:39。
【参考方案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
)?
【讨论】:
【参考方案2】:我会尝试使用您可能的日期字符串格式的DateFormatter
,然后尝试将其转换为双精度。或反之亦然。顺序真的没有太大关系,尽管先检查双精度可能会稍微便宜一些。
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
请注意,Date
的默认 description
使用 GMT。在我的情况下,它关闭了 4 小时,这就是为什么显示的时间与我输入的时间不同 4 小时。
【讨论】:
以上是关于如何在 Swiftyjson 中检查值是日期字符串还是双精度值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 SwiftyJSON 从深度嵌套的 JSON 字典中获取字符串 [重复]