首页 > 解决方案 > 如何从 Firestore 服务器时间戳中提取本地时间?

问题描述

问题是我成功地将服务器日期转换为本地日期,但无法将时间提取为字符串。这是代码:

let serverTimestamp = getFirestoreTimestampFromServer()
let utcTimestamp: Int64 = Int64(serverTimestamp.dateValue().timeintervalSince1970)
let localTimezoneOffsetFromUtc = Int64(TimeZone.current.secondsFromGMT())
let localTimestamp = utcTimestamp + localTimezoneOffsetFromUtc
        
let localDate = Date(timeIntervalSince1970: TimeInterval(integerLiteral: localTimestamp))
print(localDate)
//This works, I get the local date as 2020-07-20 20:10:40 +0000
//So server timestamp is successfully converted
//BUT----

let dateFormatter1 = DateFormatter()
dateFormatter1.dateFormat = "hh:mm"
let localTimeString = dateFormatter1.string(from: localDate)
print(localTimeString)

当我打印本地时间字符串时,我得到"1:40"而不是"20:10"。供您参考,我的当地时间比格林威治标准时间或我的服务器时间早 5 小时。

同样,时间戳已成功转换,但未将提取时间转换为字符串部分。

标签: swiftfirebasegoogle-cloud-firestore

解决方案


原来我不必使用 secondsFromGMT。使用 Timestamp.dateValue().timeintervalSince1970 并简单地使用 dateformatter 来获取所需的时间

let serverGMTTime = getServerTime() as? Timestamp
let convertedTime = Int(serverTime.dateValue().timeintervalSince1970)
let localDate = Date(timeintervalSince1970: TimeInterval(integerLiteral: convertedTime)

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "hh:mm"
let stringLocalTime = dateFormatter.string(from: localDate)

推荐阅读