Android:从firebase获取当前日期和时间

时间:2018-04-16 19:40:30

标签: android firebase firebase-realtime-database timestamp

我正在开发一个简单的游戏,用户可以获得每日奖金。我想从firebase服务器获取当前日期和时间,因为我不想依赖可能被操纵的设备时间。
我去了通过firebase中的ServerValue.TIMESTAMP但不知道如何使用它。它返回一个值为timestamp的地图。如何将该时间戳转换为date.I想从firebase获取今天的日期用户点击每日奖金。

3 个答案:

答案 0 :(得分:4)

自从Firebase引入Callable Functions以来,您可以通过在Firebase Cloud Functions中创建可调用函数来轻松在应用程序中使用它。 在您的index.js中,创建一个函数并使其返回当前时间戳

exports.getTime = functions.https.onCall((data,context)=>{
return Date.now()
})

然后将其部署到Firebase Cloud Functions

然后在您的Android应用中添加Callable Functions依赖项

implementation 'com.google.firebase:firebase-functions:16.1.0'

然后以这种方式从您的应用中调用该函数,并确保您输入的函数名称与Cloud Function中的函数 getTime 相同

    FirebaseFunctions.getInstance().getHttpsCallable("getTime")
            .call().addOnSuccessListener(new OnSuccessListener<HttpsCallableResult>() {
        @Override
        public void onSuccess(HttpsCallableResult httpsCallableResult) {
            long timestamp = (long) httpsCallableResult.getData();

        }
    });

如果要在多个类中调用此方法,还可以创建一个Simple接口

public interface OnGetServerTime {
    void onSuccess(long timestamp);

    void onFailed();
}

 public void getServerTime(final OnGetServerTime onComplete) {
    FirebaseFunctions.getInstance().getHttpsCallable("getTime")
            .call()
            .addOnCompleteListener(new OnCompleteListener<HttpsCallableResult>() {
                @Override
                public void onComplete(@NonNull Task<HttpsCallableResult> task) {
                    if (task.isSuccessful()) {
                        long timestamp = (long) task.getResult().getData();
                        if (onComplete != null) {
                            onComplete.onSuccess(timestamp);
                        }
                    } else {
                        onComplete.onFailed();
                    }
                }
            });

}

答案 1 :(得分:0)

- name: print stdout debug: msg: "{{ output.path }}" 只是Firebase实时数据库在写入操作期间用作子值时转换为服务器上的数字的标记。写入完成后,日期仅出现在数据库中。

如果您想要该值,可以在编写它的位置从数据库中读取它。但是你应该明白,这需要与数据库进行两次往返,首先要编写它,然后再次阅读它。当你获得价值时,它将不再是当前时刻的完美表示,因为它代表了最初写入价值的时刻。

答案 2 :(得分:-2)

您可以使用java.util.Date将时间戳转换为日期和时间。 例如

Date date = new Date(timestamp.getTime());