获取android、firebase聊天应用的正确时间戳



我想知道如何根据用户的位置在android中获得正确的毫秒时间,即使系统中的时间不正确或与实际时间不同。

我正在使用Firebase构建一个聊天应用程序,我需要为每条消息发送&将其存储在Firebase中,这样我就可以按时间戳顺序向用户显示消息。

我已经尝试了以下方法,但它没有工作,因为它只是返回相同的时间,是系统的,而不是准确的时间-

DatabaseReference offsetRef = FirebaseDatabase.getInstance().getReference(".info/serverTimeOffset");
offsetRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
Log.d(TAG, "onDataChange: Time snapshot: " + snapshot);
long offset = snapshot.getValue(Long.class);
long estimatedServerTimeMs = System.currentTimeMillis() + offset;
}
}
@Override
public void onCancelled(DatabaseError error) {
System.err.println("Listener was cancelled");
}
});

Firebase/Firestore的所有时间戳都使用UTC时间戳,因此没有本机偏移量。相反,您必须从用户的设备捕获时区偏移量,并将其与消息或用户的公共配置文件一起存储,以便您可以使用:

从设备调用它。
return TimeZone.getDefault().getOffset(System.currentTimeMillis());

然后你可以将它添加到用户的消息时间戳中,这是因为,默认情况下,时区是由你自己的操作系统在以人类可读的格式读取时添加的。

最新更新