Swift-处理Firebase时间戳

问题描述 投票:0回答:1

我正在开发Firebase项目,我在Collection中有一个Timestamp字段,它显示在图像下方

Firebase screenshot

当我从印度时区读取该时间戳时,我得到的日期字符串为2020年1月26日,星期日12:00 AM

但是,当我从帕果帕果-美属萨摩亚(GMT-11)时区阅读它时,我得到的日期字符串为2020年1月25日星期六07:30 AM] >>

我正在使用下面的代码

    let formatter = DateFormatter()
    formatter.dateFormat = "EEE MMM dd, yyyy hh:mm a"
    let coll = Firestore.firestore().collection("Collection1")
    coll.getDocuments { (snap, error) in
        for doc in snap!.documents {
            let date = doc["createdOn"] as! Timestamp
            print(formatter.string(from: date.dateValue()))
        }
    }

在firebase中,我将该日期字段值配置为2020年1月26日,星期日UTC +5:30。

我的问题是不考虑时区,我希望日期字符串结果为2020年1月26日,星期日],如何实现此目的

我正在研究Firebase项目,我在Collection中有一个Timestamp字段,该字段显示在图像Firebase屏幕截图的下方,当我从印度时区读取该时间戳时,我得到的日期字符串为...

swift firebase google-cloud-firestore timestamp nsdateformatter
1个回答
0
投票
Firestore时间戳记没有本地时区。您在Firebase控制台中看到的是在本地计算机上配置的时区中解释的时间戳。从不同时区查看时,它的显示方式会有所不同,但是时间戳所代表的时间点始终保持不变。在内部,时间戳使用UTC。从API documentation

时间戳表示与任何时区无关的时间点,或日历,以秒和秒的分数表示UTC纪元时间的纳秒分辨率。它使用阳历公历,扩展了阳历倒退到第一年。假设所有分钟均为60,则进行编码秒,即“涂抹”了seconds秒,因此没有leap秒需要表来解释。范围是0001-01-01T00:00:00Z到9999-12-31T23:59:59.999999999Z。通过限制在该范围内,我们确保我们可以与RFC 3339日期字符串进行相互转换。
© www.soinside.com 2019 - 2024. All rights reserved.