如何保存当前日期/时间,当我向 Firebase 实时数据库添加新值时

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

我怎样才能做到这一点?

请帮帮我。


答案 1

最佳做法是将数据保存为如下所示。TIMESTAMPServerValue.TIMESTAMP

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Map map = new HashMap();
map.put("timestamp", ServerValue.TIMESTAMP);
ref.child("yourNode").updateChildren(map);

还要记住,当您设置 时,将其设置为 ,但是当您检索它时,您将它检索为 .要取回数据,我建议您使用此方法:TIMESTAMPMapLong

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;}
}

请记住,它只是 Firebase 实时数据库在写入操作期间用作子值时在服务器端转换为数字的令牌。只有在写入操作完成后,该日期才会出现在数据库中。ServerValue.TIMESTAMP

要获得 ,还有另一种方法,即在 Firebase 的 Cloud Functions 中编写一个 frunction,它将像这样简单:timestamp

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

您可以在云函数中托管此内容,并在没有用户交互的情况下获取服务器时间戳。


答案 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");
                }
            }
        });
    }

推荐