当我通过控制面板向Firebase实时数据库添加新值时,我想在特定字段中保存当前日期/时间。
我怎样才能做到这一点?
请帮帮我。
答案 0 :(得分:13)
最佳做法是将您的数据保存为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中托管此功能,并在无需用户交互的情况下获取服务器时间戳。
答案 1 :(得分:3)
亚历克斯·马莫是对的但是这就是你应该如何通过你从模型类中调用它的方式
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");
}
}
});
}
答案 2 :(得分:2)
将数据类型编号用于Firebase。