web-dev-qa-db-ja.com

Firebase Realtime Databaseに新しい値を追加したときに現在の日付/時刻を保存する方法

コントロールパネルからFirebase Realtime Databaseに新しい値を追加するときに、特定のフィールドに現在の日付/時刻を保存したい。

どうすればそれを達成できますか?

私を助けてください。

10
Leenah

ベストプラクティスは、このように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 Realtime Databaseが書き込み操作中に子の値として使用されたときにサーバー側で数値に変換されるトークンにすぎません。日付は、書き込み操作が完了した後にのみデータベースに表示されます。

timestampを取得するには、別の方法もあります。これは Cloud Functions for Firebase で断片を書き込むことであり、次のように簡単です。

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

これをCloud Functionでホストし、ユーザーの操作なしでサーバーのタイムスタンプを取得できます。

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

Firebaseにデータ型Numberを使用します。

  1. Fireabaseにデータを保存するときに現在のミリ秒を保存します。
  2. データを取得している間、以前に保存されたミリ秒を取得します。 Java日付インスタンスに解析して、さらに作業します。
2
Mitul Gedeeya