在Firebase Firestore中获取当前服务器的日期和时间

时间:2020-04-11 18:01:36

标签: android firebase kotlin google-cloud-firestore

我想在Firebase Firestore中获取服务器时间,以便将其用于倒数逻辑。我在任何地方都找不到,大多数情况下,他们建议使用FiedValue.serverTimeStampServerValue.TIMESTAMP两者都用于保存数据。我不想保存数据,我只想获取服务器时间。

是否有像FirebaseFirestore.getInstance().getServerTime()这样的静态方式?

2 个答案:

答案 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