我该如何实现?
请帮助我。
#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 Realtime Database在写操作期间用作子值时,它将转换为服务器端的数字。该日期仅在写入操作完成后才出现在数据库中。要获取
timestamp
,还有另一种方法,那就是在Cloud Functions for Firebase中编写函数,这将非常容易如:exports.currentTime = functions.https.onRequest((req, res) => {
res.send({"timestamp":new Date().getTime()})
})
您可以在Cloud Function中托管它,而无需用户交互即可获取服务器时间戳。
评论
非常感谢您的回答,希望能解决我的问题。
– Leenah
17-4-24在11:42
我不赞成这样做,因为存储的bn值是一个如图所示的对象...“ {。sv = timestamp}”
–好生活
17年8月31日在17:38
很抱歉,投反对票。您是对的,但是现在您必须提醒盖伊,该模型应该有公共地图时间;在类声明中
–好生活
17年8月31日18:00
@Goodlife是的,你是对的。我刚刚用模型类更新了答案。希望您重新考虑增加答案。谢谢!
– Alex Mamo
17年9月1日在9:02
@NoorHossain请发布有关此特定案例的新问题。
– Alex Mamo
19年11月22日在15:51
#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 Date Instance并进一步工作。
评论
感谢您的帮助,能否请您解释一下更多代码?
– Leenah
17年4月24日在9:24
我已经添加了步骤。只要按照这些步骤操作,您肯定会得到结果。
– Mitul Gedeeya
17年4月24日在9:25
但是,我将如何基于millis .... startAt()和endAt()进行查询,而不需要长值。
– Shahood ul Hassan
7月12日15:22
评论
发布您的代码以解决您的问题