gpt4 book ai didi

swift:将 long/int64 转换为日期

转载 作者:可可西里 更新时间:2023-11-01 00:19:53 25 4
gpt4 key购买 nike

我想将 1529704800000 转换为 Date 对象,但我没有得到正确的日期。我正在从 json 中获取值。我正在以这种方式转换值:

class Example: Decodable {

var id: Int64?
var date: Date?

init(json: [String: Any]) {
id = json["id"] as? Int64 ?? -1
var dateTime = (json["date"] as AnyObject? as? Int64) ?? 0
date = Date(timeIntervalSince1970: (TimeInterval(dateTime / 1000)))
}

static func fetchReportsForUser(authorId: Int64) -> [Report]? {
let urlString = "http://localhost:8080/test-application/rest/example/"
let url = URL(string: urlString)!
var examples = [Example]()
let group = DispatchGroup()
group.enter()
DispatchQueue.global(qos: .default).async {
URLSession.shared.dataTask(with: url) { (data, response, error) -> Void in
if error != nil {
print(error!)
return
}
guard let data = data else {
return
}
if(data.isEmpty) {
group.leave()
return
}
do {
examples = try JSONDecoder().decode([Example].self, from: data)
} catch let err {
print(err)
}
group.leave()
}.resume()
}
group.wait()
return examples
}
}

当我这样做时,我仍然得到 50472-09-04 16:00:00 +0000 作为日期。我尝试使用 Double 而不是 Int64,但我得到了相同的结果。

最佳答案

只需让 JSONDecoder 使用适当的日期解码策略 即可完成工作

let json = """
{"id" : 1, "date" : 1529704800000}
"""

struct Example : Decodable {
let id : Int
let date : Date
}

let data = Data(json.utf8)
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .millisecondsSince1970
do {
let result = try decoder.decode(Example.self, from: data)
print(result) // Example(id: 1, date: 2018-06-22 22:00:00 +0000)
} catch {
print(error)
}

注意:不要使异步任务同步。了解异步数据处理并使用完成处理程序。

关于swift:将 long/int64 转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51539095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com