ios - Firestore FieldValue.serverTimestamp() 正在保存本地时间戳而不是服务器的时间戳
问题描述
- 我有一个聊天应用程序,目前我使用timeIntervalSince1970处理日期。这就是它在firestore中的存储方式
- 由于两个人可以从两个不同的国家聊天,我通过获取本地时间戳来处理这个问题,将其转换为 GMT 时间戳,然后将其存储在 firestore
- 事实证明这是一个糟糕的实现,因为我们不应该依赖设备时间,所以我只是转向使用 Firestore 的FieldValue.serverTimestamp()
- 我认为firebase将使用它自己的服务器时间(我的firebase服务器在美国),但它似乎将它存储在当地时间(我目前在印度)
- 我在这里想念什么?我知道它以 UTC 存储,但本地时间显示在文档中。如何存储单个全球时间?
这是代码:
func firebaseTimestampSet(){
guard let currentUid = Auth.auth().currentUser?.uid else {return}
let ref = Firestore.firestore().collection("dateTest").document(currentUid)
ref.setData(["timestamp": FieldValue.serverTimestamp()])
}
结果如下:
解决方案
正如您将在文档中阅读的那样:
Timestamp 表示独立于任何时区或日历的时间点,以 UTC 纪元时间的纳秒分辨率表示为秒和秒的分数。
如果您在 Firebase 控制台中看到“本地时间显示在文档中”,那是因为 Firebase 控制台使用您计算机的时区配置来显示您本地时间的时间戳值。
综上所述:
- 问题:“我如何存储一个全球时间?” 答案:“有了
FieldValue.serverTimestamp()
,已经是这样了,它存储在 UTC 中”。 - 在您的应用程序中,您可以决定如何显示时间戳值(作为 UTC 或转换为用户的时区)。
推荐阅读
- python - 如何使用自定义停用词词典从数据框列中删除英语停用词
- google-drive-api - 如何在 Colaboratory 中挂载 Google 共享驱动器?
- apache-pig - 传递带有空格的参数
- r - 如何在xts中找到第N行的索引
- r - arima.sim() 函数具有不同的:样本大小、phi 值和 sd 值
- angular - 我尝试在我的角度网站中进行惰性模式
- java - 如何减小现有 PDF 中每个单元格值的字体大小,使用 Itext 库
- python - 使用 pandas 从 CSV 文件中读取特定行的函数
- amazon-web-services - 使用 Amazon SNS 发送 SMS 时,是否可以使用电话号码而不是发件人 ID?
- next.js - 警告:由于检测到自定义 CSS 配置,内置 CSS 支持被禁用