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

新手上路,请多包涵

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

我怎样才能做到这一点?

请帮我。

原文由 Leenah 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 549
2 个回答

最佳做法是将您的数据保存为 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 中,并在无需用户交互的情况下获取服务器时间戳。

原文由 Alex Mamo 发布,翻译遵循 CC BY-SA 4.0 许可协议

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

原文由 Goodlife 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题