Swift 快速处理Firebase时间戳

Swift 快速处理Firebase时间戳,swift,firebase,google-cloud-firestore,timestamp,nsdateformatter,Swift,Firebase,Google Cloud Firestore,Timestamp,Nsdateformatter,我正在从事firebase项目,我在一个集合中有一个时间戳字段,它位于图像下方 当我读到印度时区的时间戳时,我得到的日期字符串是Sun Jan 26,2020年12:00 am 但当我从帕果-帕果-美属萨摩亚GMT-11时区读到它时,我得到的日期字符串是2020年1月25日星期六上午7:30 我正在使用下面的代码 let formatter = DateFormatter() formatter.dateFormat = "EEE MMM dd, yyyy hh:mm a"

我正在从事firebase项目,我在一个集合中有一个时间戳字段,它位于图像下方

当我读到印度时区的时间戳时,我得到的日期字符串是Sun Jan 26,2020年12:00 am

但当我从帕果-帕果-美属萨摩亚GMT-11时区读到它时,我得到的日期字符串是2020年1月25日星期六上午7:30

我正在使用下面的代码

    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日12:00 AM UTC+5:30


我的问题是,不管时区如何,我希望日期字符串结果为2020年1月26日,我如何实现这一点呢。您在Firebase控制台中看到的是在本地计算机上配置的时区中解释的时间戳。当从不同的时区查看时,它将显示不同,但时间戳表示的时间点始终保持不变。在内部,时间戳使用UTC。从:

时间戳表示独立于任何时区或时间的时间点 日历,以秒和秒的分数表示 UTC历元时间的纳秒分辨率。它是使用 公历前公历,是公历的延续 回到第一年。假设所有分钟数均为60,则对其进行编码 秒长,即闰秒被“涂抹”,因此没有闰秒 需要表格进行解释。范围为0001-01-01T00:00:00Z 至9999-12-31T23:59:59.999999Z。通过限制在该范围内,我们 确保我们可以在RFC 3339日期字符串之间进行转换


如果您想根据特定的本地时区设置时间格式,您必须使用一些库来帮助您。时间戳对象本身无法满足您的本地时间格式化需要。

Firestore时间戳没有本地时区感。您在Firebase控制台中看到的是在本地计算机上配置的时区中解释的时间戳。当从不同的时区查看时,它将显示不同,但时间戳表示的时间点始终保持不变。在内部,时间戳使用UTC。从:

时间戳表示独立于任何时区或时间的时间点 日历,以秒和秒的分数表示 UTC历元时间的纳秒分辨率。它是使用 公历前公历,是公历的延续 回到第一年。假设所有分钟数均为60,则对其进行编码 秒长,即闰秒被“涂抹”,因此没有闰秒 需要表格进行解释。范围为0001-01-01T00:00:00Z 至9999-12-31T23:59:59.999999Z。通过限制在该范围内,我们 确保我们可以在RFC 3339日期字符串之间进行转换


如果您想根据特定的本地时区设置时间格式,您必须使用一些库来帮助您。timestamp对象本身无法满足您的本地时间格式化需求。

我知道,从不同时区查看时,firebase控制台时间戳的显示方式会有所不同。我的场景是,我正在配置将于1月26日发生的事件,如果我使用Swift从firebase读取该事件并将其显示在iPhone UI上,我会在印度时区看到1月26日,但我在帕果-帕果-美属萨摩亚GMT-11时区的朋友会在他的iPhone上看到1月25日,我如何使用DeaFrMatter来正确显示DATE,您可能想考虑不使用时间戳,而不是使用没有时间的一天的不同表示,例如YYYYMMD。我理解从不同时区查看时,FialBase控制台时间戳会出现不同。我的场景是,我正在配置将于1月26日发生的事件,如果我使用Swift从firebase读取该事件并将其显示在iPhone UI上,我会在印度时区看到1月26日,但我在帕果-帕果-美属萨摩亚GMT-11时区的朋友会在他的iPhone上看到1月25日,如何使用DATEFALTATER正确显示DATE,您可能需要考虑根本不使用时间戳,而不是使用没有时间的一天的不同表示,例如YYYYMMD。