如何使用Android在Firestore中添加时间戳?
2018-01-27
12576
我正在尝试使用 Firebase Firestore 在 Android 客户端中添加时间戳字段。
根据 文档 :
Annotation used to mark a Date field to be populated with a server timestamp. If a POJO being written contains null for a @ServerTimestamp-annotated field, it will be replaced with a server-generated timestamp.
但是当我尝试时:
@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
。
3个回答
这不是将时间和日期添加到 Cloud Firestore 数据库的正确方法。最佳做法是拥有一个模型类,您可以在其中添加类型为
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() 方法,如下所示:
Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Alex Mamo
2018-01-27
使用
FieldValue.serverTimestamp()
获取服务器时间戳
Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());
Ali Faris
2018-01-27
我遇到了类似的问题,我在我的 catlog 中找到了这个问题并解决了它
firebaseFirestore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
firebaseFirestore.setFirestoreSettings(settings);
RickyS
2018-06-26