java - read - ServerTimestamp siempre es nulo en Firebase Firestore
firestore update document (3)
Esa no es la forma correcta de cómo agregar la hora y la fecha a una base de datos de Cloud Firestore.
La mejor práctica es tener una clase de modelo en la que pueda agregar una fecha archivada de tipo
Date
junto con una anotación.
Así es como debería verse su clase de modelo:
import java.util.Date;
public class YourModelClass {
@ServerTimestamp
private Date date;
YourModelClass() {}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
Cuando crea en un objeto de la clase
YourModelClass
, no es necesario establecer la fecha.
Los servidores de Firebase leerán su campo de
date
, ya que es una
ServerTimestamp
(vea la anotación), y rellenará el archivo archivado con la marca de tiempo del servidor en consecuencia.
Otro enfoque sería utilizar el método FieldValue.serverTimestamp() esta manera:
Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Estoy tratando de agregar un campo de marca de tiempo en un cliente de Android con Firebase Firestore.
De acuerdo con la documentation :
Anotación utilizada para marcar un campo Fecha que se rellenará con una marca de tiempo del servidor. Si un POJO que se está escribiendo contiene nulo para un campo @ ServerTimestamp-annotated, será reemplazado por una marca de tiempo generada por el servidor.
Pero cuando lo intento:
@ServerTimestamp
Date serverTime = null; // I tried both java.util.Date and java.sql.Date
//...
Map<String, Object> msg = new HashMap<>();
// ... more data
msg.put("timestamp", serverTime);
En la base de datos de Cloud Firestore, este campo siempre es
null
.
Tengo un problema similar, y encontré esto en mi catlog y resolví mi problema
firebaseFirestore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
firebaseFirestore.setFirestoreSettings(settings);
use
FieldValue.serverTimestamp()
obtener la marca de tiempo del servidor
Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());