I want to save the current date/time in specific field when I add new value to Firebase Realtime Database via control panel.
How can I achieve that?
Please
The best practice is to save your data as a TIMESTAMP
like this ServerValue.TIMESTAMP
.
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Map map = new HashMap();
map.put("timestamp", ServerValue.TIMESTAMP);
ref.child("yourNode").updateChildren(map);
Also remember, when you set the TIMESTAMP
, you set it as a Map
, but when you retrieve it, you retrieve it as a Long
. To get the data back, i suggest you use this method:
public static String getTimeDate(long timestamp){
try{
DateFormat dateFormat = getDateTimeInstance();
Date netDate = (new Date(timestamp));
return dateFormat.format(netDate);
} catch(Exception e) {
return "date";
}
}
Edit: The model class should look like this:
public class YourModelClass {
//private fields
private Map timestamp;
public YourModelClass() {}
//public setters and getters for the fields
public void setTimestamp(Map timeStamp) {this.timestamp= timestamp;}
public Map getTimestamp() {return timestamp;}
}
Remember, ServerValue.TIMESTAMP
is just a token that Firebase Realtime Database converts to a number on server side when it's used as a child value during write operation. The date only appears in the database after the write operation completes.
To get the timestamp
, there is also another approach, which would be to write a frunction in Cloud Functions for Firebase and it will be as easy as:
exports.currentTime = functions.https.onRequest((req, res) => {
res.send({"timestamp":new Date().getTime()})
})
You can host this in Cloud Function and get the server timestamp without user interaction.