向 Firebase 实时数据库添加新值时如何保存当前日期/时间
Posted
技术标签:
【中文标题】向 Firebase 实时数据库添加新值时如何保存当前日期/时间【英文标题】:How to save the current date/time when I add new value to Firebase Realtime Database 【发布时间】:2017-09-20 21:47:32 【问题描述】:当我通过控制面板向 Firebase 实时数据库添加新值时,我想将当前日期/时间保存在特定字段中。
我怎样才能做到这一点?
请帮帮我。
【问题讨论】:
发布您的代码以解决您的问题 【参考方案1】:最佳做法是将您的数据保存为TIMESTAMP
,例如ServerValue.TIMESTAMP
。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Map map = new HashMap();
map.put("timestamp", ServerValue.TIMESTAMP);
ref.child("yourNode").updateChildren(map);
还请记住,当您设置TIMESTAMP
时,您将其设置为Map
,但是当您检索它时,您将其检索为Long
。要取回数据,我建议您使用这种方法:
public static String getTimeDate(long timestamp)
try
DateFormat dateFormat = getDateTimeInstance();
Date netDate = (new Date(timestamp));
return dateFormat.format(netDate);
catch(Exception e)
return "date";
编辑:模型类应如下所示:
public class YourModelClass
//private fields
private Map<String, String> timestamp;
public YourModelClass()
//public setters and getters for the fields
public void setTimestamp(Map<String, String> timeStamp) this.timestamp= timestamp;
public Map<String, String> getTimestamp() return timestamp;
请记住,ServerValue.TIMESTAMP
只是一个令牌,当它在写入操作期间用作子值时,Firebase 实时数据库将其转换为服务器端的数字。日期只有在写操作完成后才会出现在数据库中。
要得到timestamp
,还有另一种方法,就是在Cloud Functions for Firebase中写一个函数,就这么简单:
exports.currentTime = functions.https.onRequest((req, res) =>
res.send("timestamp":new Date().getTime())
)
您可以将其托管在 Cloud Function 中,无需用户交互即可获取服务器时间戳。
【讨论】:
非常感谢您的回答,希望能解决我的问题。 我投了反对票,因为存储的值 bn 是一个如图所示的对象...".sv=timestamp" 很抱歉投反对票你是对的但现在你必须提醒guyz模型应该有公共地图时间;在类声明中 @Goodlife 是的,你是对的。我刚刚用模型类更新了答案。希望您重新考虑支持答案。谢谢! @NoorHossain 请就这个特殊案例发布一个新问题。【参考方案2】:Alex Mamo 是对的,但如果你从模型类中调用它,那么这就是你应该通过的方式
public class FirebMessage
public String message;
public String senderPhoneNumber;
public String receiverPhoneNumber;
public Map time;
public FirebMessage()
public FirebMessage(String message, String senderPhoneNumber, String receiverPhoneNumber, Map time)
this.message = message;
this.senderPhoneNumber = senderPhoneNumber;
this.receiverPhoneNumber = receiverPhoneNumber;
this.time = time;
然后如下消费
private void writeNewMessage(String message, String receiver,String sender)
FirebMessage firebMessage = new FirebMessage(message, receiver,sender,ServerValue.TIMESTAMP);
mDatabase.child("messages").push().setValue(firebMessage, new DatabaseReference.CompletionListener()
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference)
if (databaseError != null)
Log.e(TAG,"Data Not saved");
else
Log.e(TAG,"Data saved successfully");
);
【讨论】:
【参考方案3】:在 Firebase 中使用数据类型 Number。
-
在将数据存储到 Fireabase 时存储当前毫秒。
在检索数据时,您将获得之前存储的毫秒。
解析成 Java 日期实例并进一步工作。
【讨论】:
感谢您的帮助,您能用代码解释一下吗? 我已添加步骤。只要按照这些步骤,你一定会得到结果。 但是我将如何根据millis进行查询......startAt()
和endAt()
不要取long
值。以上是关于向 Firebase 实时数据库添加新值时如何保存当前日期/时间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 C# 创建 Access 数据库并不断向其中保存实时数据
通过向已有默认值的 TextField 输入新值来更新存储在 Firebase 上的数据
在 Firebase 实时数据库中,当我更新值时,它会立即恢复为旧值