コントロールパネルからFirebase Realtime Databaseに新しい値を追加するときに、特定のフィールドに現在の日付/時刻を保存したい。
どうすればそれを達成できますか?
私を助けてください。
ベストプラクティスは、このように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でホストし、ユーザーの操作なしでサーバーのタイムスタンプを取得できます。
アレックスマモは正しいですが、モデルクラスから呼び出す場合にこれを渡す必要があります
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");
}
}
});
}
Firebaseにデータ型Numberを使用します。