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

时间:2017-04-24 09:20:59

标签: java android firebase firebase-realtime-database

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

我怎样才能做到这一点?

请帮帮我。

3 个答案:

答案 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。

  1. 将数据存储到Fireabase中时存储当前毫秒数。
  2. 检索数据时,您将获得之前存储的毫秒数。 解析为Java Date Instance并进一步工作。