我想在Firebase Firestore中获取服务器时间,以便将其用于倒数逻辑。我在任何地方都找不到,大多数情况下,他们建议使用FiedValue.serverTimeStamp
或ServerValue.TIMESTAMP
两者都用于保存数据。我不想保存数据,我只想获取服务器时间。
是否有像FirebaseFirestore.getInstance().getServerTime()
这样的静态方式?
答案 0 :(得分:1)
按照@Doug的说法,无法从Firebase仅仅获得时间。但是,相同的处理方式很多。
首先,由于当今时代的所有时间都与卫星同步,因此您可以通过应用用户的设备使用倒数计时。可以使用以下方法完成:
Date dateStart = new Date();
Date dateEnd = new Date();
System.out.println(dateEnd.getTime() - dateStart.getTime()/1000);
第二,在firebase中为开始时间创建一个对象(针对特定用户),然后在倒计时结束时计算当前时间与数据库中上传时间之间的时差。
>FirebaseFirestore db = FirebaseFirestore.getInstance();
// At the time of setting.
Map<String, Object> map= new HashMap<>();
map.put("startTime", (new Date()).getTime());
db.collection(userdata).document(userid).set(map);
// At the time of retrieving:
db.collection(userdata).document(userid).get()
.addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
// Here you can get the time..
}
} else {
Log.d(TAG, "get failed with ", task.getException());
}
}
});
现在,如果您不喜欢上述任何一种方法,则可以在https://firebase.google.com/support上提出支持请求,时间
答案 1 :(得分:0)
没有提供获取实际服务器时间的方法。
服务器时间戳只是客户端上的令牌值,当它们到达Firestore时会给出最终值。最好的办法是将服务器时间戳记写入文档中的某个字段,然后在该字段具有值后从Firestore中读取文件。请记住,此时时间戳将是“延迟的”,因为您的代码实际写入和读取数据需要花费时间。您无法保证该过程将花费多长时间。
要详细了解服务器时间戳的工作原理,请read this article。