将 Firestore 时间戳转换为日期数据类型

Posted

技术标签:

【中文标题】将 Firestore 时间戳转换为日期数据类型【英文标题】:Converting Firestore Timestamp to Date data type 【发布时间】:2018-06-24 08:04:31 【问题描述】:

几天前,我刚刚将我的 firebase pod 更新到了最新版本,在我的调试区域中,我收到消息说我必须从时间戳数据类型更新为 Date(类似的东西,我实际上忘记了)。

我还必须更改数据库设置,如下所示

let db = Firestore.firestore()
let settings = db.settings
settings.areTimestampsInSnapshotsEnabled = true
db.settings = settings

添加上面的代码后,我在Xcode中调试区的错误信息消失了。

据我记得,我还必须将客户端中的数据类型从 Timestamp 更改为 Date 数据类型,我没有更改此设置,因为我在 Xcode 中的调试区域中的错误消息已经消失。

因此,我的应用中的日期不正确。

能否再次分享从 TimeStamp 到 Date 的转换步骤?因为据我记得,我必须采取一些步骤才能遵循。我在 firebase 文档中找不到它。

非常感谢:)

【问题讨论】:

【参考方案1】:

这是来自调试器的消息

存储在 Firestore 中的系统 Date 对象的行为将发生变化,您的应用程序可能会中断。 要隐藏此警告并确保您的应用不会中断,您需要在调用任何其他 Cloud Firestore 方法之前将以下代码添加到您的应用中:

let db = Firestore.firestore()
let settings = db.settings
settings.areTimestampsInSnapshotsEnabled = true
db.settings = settings

进行此更改后,存储在 Cloud Firestore 中的时间戳将作为 Firebase 时间戳对象而不是系统 Date 对象读回。因此,您还需要将期望日期的代码更新为期望时间戳。例如:

// old:
let date: Date = documentSnapshot.get("created_at") as! Date
// new:
let timestamp: Timestamp = documentSnapshot.get("created_at") as! Timestamp
let date: Date = timestamp.dateValue()

启用新行为时,请审核 Date 的所有现有用法。在未来的版本中,该行为将更改为新行为,因此如果您不遵循这些步骤,您的应用可能会中断。

【讨论】:

以上是关于将 Firestore 时间戳转换为日期数据类型的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Kotlin 中将 Firestore 日期/时间戳转换为日期?

将 Firebase Firestore 时间戳转换为日期(Swift)?

将数据推送到数组中,但在将时间戳转换为日期之后

使用云功能时,来自 Firestore 的时间戳会转换为地图

如何将所有日期格式转换为日期列的时间戳?

使用 sql 将字符串纪元代码从 unix 时间戳转换为日期