Percy

当我向Firebase Realtime Database添加新值时如何保存当前日期/时间

java

通过控制面板将新值添加到Firebase实时数据库时,我想在特定字段中保存当前日期/时间。

我该如何实现?

请帮我。


阅读 356

收藏
2020-12-06

共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.TIMESTAMPFirebase Realtime Database只是一个令牌,当它在写入操作期间用作子值时,它将转换为服务器端的数字。该日期仅在写入操作完成后才出现在数据库中。

要获取timestamp,还有另一种方法,那就是在Cloud Functions for Firebase中编写一个fronction ,它很简单:

exports.currentTime = functions.https.onRequest((req, res) => {
    res.send({"timestamp":new Date().getTime()})
})

您可以将其托管在Cloud Function中,无需用户干预即可获取服务器时间戳。

2020-12-06