0

Firebase关于存在的文档说“客户端的时钟偏差”是一个值“Firebase 将添加到本地报告时间(以毫秒为单位的纪元时间)以估计服务器时间”。

然后,在示例中,它例如说:

 @Override
 public void onDataChange(DataSnapshot snapshot) {
     double offset = snapshot.getValue(Double.class);
     double estimatedServerTimeMs = System.currentTimeMillis() + offset;
 }

在我用于测试的一台 Android 设备上,我更改了时钟,使其快了 4 分钟(大约)。现在,当我通过 Java SDK 获得时钟偏差时,我得到的值如下:

232599.0

因为它以毫秒为单位,所以它对应于3.87665分钟。

但是要估计服务器的时间,我必须它添加到本地时间戳 ( System.currentTimeMillis())。是对的吗?

如果客户的时钟已经快了 4 分钟,我加上这 3.9 分钟,我得到的估计不是快了大约 8 分钟吗?

顺便说一句,如果我可以在setPriority(). 目前,ServerValue.Timestamp仅可用于setValue()因为它不是原始值。由于我想使用 中的时间setPriority(),我必须通过使用System.currentTimeMillis()和时钟偏差来计算服务器的时间。

4

1 回答 1

1

您添加偏移量以确定相对于服务器的本地化时间。

因此,如果您获得 08:05 的服务器时间,您的客户端快 10 分钟,那么客户端机器上的时钟在客户端读取 08:15(08:05 + 00:10 分钟)。

如果您想在不使用 ServerValue.Timestamp 的情况下恢复时间,那么您将减去,这将花费客户端时间并使其与服务器匹配(例如 08:15 - 00:10 = 08:05)。

这就是我在引入 ServerValue.Timestamp 之前在项目中的做法,并且效果很好。

于 2013-08-23T16:14:44.710 回答