iOS 模拟器时间戳或 Date() 问题?

iOS simulator timestamp or Date() issue?

进入正题-

一切正常,直到最近我注意到一个有趣的问题

我注意到我的代码和一切都很好。问题是当我在我的模拟器上使用当前时间戳 Date() 时,它似乎 滞后了 11 - 15 秒(这有时甚至会与在真实设备上使用 Date() 相差 30 秒)。因此,当我立即从模拟器发送一条消息时,firebase 服务器上记录的时间戳平均滞后 20 秒,并且由于我的消息是根据时间戳排序的,它会将这条消息放在最后一条收到的消息之前,而实际上它应该在最后一条消息之后。

这是一个已知的模拟器问题吗?我无法在另一台真实设备上测试它,因为我只有一个

func sendChatMessage() {
       let localDate = Date()
       let GMTTimestamp = getGMTTimestamp(localDate: localDate.timeintervalsince1970)
       let GMTTimestampFinal = Int64(GMTTimestamp)

       //perform server write operation
}

我认为这里的最佳做法是,如果您的应用对时间戳敏感,则使用固定且稳定的时间戳源,这将使用 Firebase Timestamp。

本地生成的日期或时间戳可能不稳定且不可预测;如果设备在任何地方都没有更新为当地时间,或者他们关闭了该功能,或者他们只是出于其他原因更改了时间。这可能会导致您的数据和排序顺序不准确。

Real Time Database Timestamp and has a different implementation than the Cloud Firestore,但这里有许多帖子和示例用于实现基于服务器的时间戳。