Android:从firebase获取当前日期和时间
Posted
技术标签:
【中文标题】Android:从firebase获取当前日期和时间【英文标题】:Android : Get current date and time from firebase 【发布时间】:2018-09-26 15:34:41 【问题描述】:我正在开发一个简单的游戏,用户可以获得每日奖励。我想从 firebase 服务器获取当前日期和时间,因为我不想依赖可以操纵的设备时间。我通过了 ServerValue。 firebase 中的 TIMESTAMP 但不知道如何使用它。它返回一个值作为时间戳的地图。我如何将该时间戳转换为日期。当用户点击每日奖金时,我想从 firebase 获取今天的日期。
【问题讨论】:
【参考方案1】:自从 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'
然后像这样从您的应用中调用该函数,并确保您键入的函数名称与您的云函数中的“getTime”相同
FirebaseFunctions.getInstance().getHttpsCallable("getTime")
.call().addOnSuccessListener(new OnSuccessListener<HttpsCallableResult>()
@Override
public void onSuccess(HttpsCallableResult httpsCallableResult)
long timestamp = (long) httpsCallableResult.getData();
);
如果你想在多个类中调用这个方法,你也可以做一个简单的接口
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();
);
【讨论】:
这太棒了!谢谢。 这是个好主意,但我想知道返回日期/时间的时区【参考方案2】:ServerValue.TIMESTAMP
只是一个令牌,当它在写入操作期间用作子值时,Firebase 实时数据库将其转换为服务器上的数字。日期仅在写入完成后出现在数据库中。
如果你想要那个值,你可以在你写它的位置从数据库中读回它。但是您应该明白,这需要与数据库进行两次往返,首先是写入,然后再次读取。当您取回该值时,它将不再是当前时刻的完美表示,因为它代表了最初写入该值的时刻。
【讨论】:
这意味着我不能使用 firebase 时间戳来每天获取当前日期和时间来提供每日奖励...... 它将关闭几秒钟。如果您想通过 REST api 执行此操作,请发布 ".sv":"timestamp" 这是您所说的令牌的等效 json 版本:) @Doug,那么有没有什么方法可以在没有读写方法的情况下使用 firebase 获取日期和时间?这里是my question,可以帮忙吗?【参考方案3】:您可以使用 java.util.Date 将时间戳转换为日期和时间。 例如
Date date = new Date(timestamp.getTime());
【讨论】:
ServerValue.TIMESTAMP
的实际值不是这样工作的。
你检查过 ServerValue.TIMESTAMP 的数据类型是什么。 ServerValue.TIMESTAMP 需要转换成long
ServerValue.TIMESTAMP 是一个地图。它没有 getTime() 方法。 firebase.google.com/docs/reference/android/com/google/firebase/…以上是关于Android:从firebase获取当前日期和时间的主要内容,如果未能解决你的问题,请参考以下文章
我需要将当前日期与其他数据一起添加到 firebase Realtime 数据库,并在 kotlin android 中检索所有带有日期的数据
使用 Firebase 3 从 FIRUser 获取创建日期和上次登录日期