我正在尝试使用Firebase Firestore在Android客户端中添加时间戳字段。
用于标记要用服务器填充的日期字段的注释 时间戳。如果正在编写的POJO包含null @ServerTimestamp-annotated字段,它将被替换为 服务器生成的时间戳。
但是当我尝试时:
@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
。
答案 0 :(得分:9)
这不是如何将时间和日期添加到Cloud Firestore数据库的正确方法。最佳做法是建立一个模型类,您可以在其中添加带有注释的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
在date
类的对象上创建时,无需设置日期。 Firebase服务器将读取您的ServerTimestamp
字段,因为它是Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
(请参阅注释),它将相应地填充该字段与服务器时间戳。
另一种方法是使用FieldValue.serverTimestamp()这样的方法:
const response = await fetch('/render-endpoint?file=some-file.jsx');
const rendered = await response.text();
document.getElementById('some-element').innerHTML = rendered;
答案 1 :(得分:4)
使用FieldValue.serverTimestamp()
获取服务器时间戳
Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());
答案 2 :(得分:1)
我有类似的问题,我在目录中发现了这个问题并解决了我的问题
firebaseFirestore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
firebaseFirestore.setFirestoreSettings(settings);
答案 3 :(得分:0)
我有类似的问题,
我收到了异常...has type java.sql.Timestamp, got java.util.Date ...
,所以我只是将类型从Timestamp
替换为Date
(来自java.util.Date
)并正常工作。