Firebase的时钟歪斜的标志

时间:2013-08-23 00:11:14

标签: java clock firebase

Firebase的docs about presence表示“客户端的时钟偏差”是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()和时钟偏差来计算服务器的时间。

1 个答案:

答案 0 :(得分:1)

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

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

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

这是我在引入ServerValue.Timestamp之前在项目中做到这一点的方式,并且它工作得很漂亮。