我正在尝试使用Firebase Firestore在Android客户端中添加时间戳字段。
根据文档:
用于标记要用服务器时间戳填充的日期字段的注释。如果正在写入的POJO包含@ServerTimestamp注释的字段为null,它将被服务器生成的时间戳替换。
但是当我尝试时:
@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);
在Cloud Firestore数据库上,此字段始终为null。
这不是将时间和日期添加到CloudFirestore数据库的正确方法。最佳实践是拥有一个模型类,您可以在其中添加类型的日期字段以及Date注释。这是您的模型类的外观:
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; } }
在YourModelClass类的对象上创建时,无需设置日期。Firebase服务器将读取您的date字段,因为它是一个字段ServerTimestamp(请参见注释),并且它将使用服务器时间戳相应地填充该字段。
另一种方法是使用FieldValue.serverTimestamp()方法,如下所示:
FieldValue.serverTimestamp()
Map<String, Object> map = new HashMap<>(); map.put("date", FieldValue.serverTimestamp()); docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}