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

时间:2018-06-24 08:04:32

标签: ios swift firebase google-cloud-firestore

几天前,我刚刚将Firebase Pod更新到最新版本,并且在调试区域,我收到一条消息,说我必须将时间戳数据类型更新为Date(类似的事情,我实际上忘记了)。

我还必须像下面那样更改数据库设置

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

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

据我所知,我还必须将客户端中的数据类型从“时间戳”更改为“日期”数据类型,因为我在Xcode的调试区域中的错误消息已经消失,所以我没有更改它。

结果是,我的应用程序中的日期不正确。

能否请您再次分享从时间戳到日期的转换步骤?因为据我所记得,我必须执行一些步骤。我在Firebase文档中找不到它。

非常感谢:)

1 个答案:

答案 0 :(得分:8)

这是来自调试器的消息

存储在Firestore中的系统日期对象的行为将更改,并且您的应用可能会中断。 要隐藏此警告并确保您的应用不会中断,您需要在调用任何其他Cloud Firestore方法之前向您的应用添加以下代码:

class Board {
    var tiles = Array(100) { Tile() } //Represents a 10x10 playing board

    operator fun get(x: Int, y: Int) = tiles[y * 10 + x]

    operator fun set(x: Int, y: Int, value: Tile) {
        tiles[y * 10 + x] = value
    }

}

fun main(args: Array<String>) {
    val board = Board()
    board[0, 0].value = 42
}

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

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

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