问题是我可以将服务器日期成功转换为本地日期,但不能将时间提取为字符串。这是代码:
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小时。
同样,时间戳转换成功,但提取时间不是字符串部分。
答案 0 :(得分:0)
原来,我不必使用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)