Java 如何使用Android在Firestore中添加时间戳?
我试图在Firebase Firestore的Android客户端中添加一个时间戳字段 根据报告: 用于标记要使用服务器填充的日期字段的批注 时间戳。如果正在写入的POJO包含 @ServerTimestamp注释字段,将替换为 服务器生成的时间戳 但当我尝试时:Java 如何使用Android在Firestore中添加时间戳?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我试图在Firebase Firestore的Android客户端中添加一个时间戳字段 根据报告: 用于标记要使用服务器填充的日期字段的批注 时间戳。如果正在写入的POJO包含 @ServerTimestamp注释字段,将替换为 服务器生成的时间戳 但当我尝试时: @ServerTimestamp Date serverTime = null; // I tried both java.util.Date and java.sql.Date //... Map<String, Obje
@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);
@ServerTimestamp
日期服务器时间=null;//我尝试了java.util.Date和java.sql.Date
//...
Map msg=newhashmap();
// ... 更多数据
msg.put(“时间戳”,serverTime);
在Cloud Firestore数据库上,此字段始终为
null
,这不是向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服务器将读取您的日期
字段,因为它是服务器时间戳
(请参见注释),并将相应地用服务器时间戳填充该字段
另一种方法是使用如下方法:
Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Map Map=newhashmap();
map.put(“date”,FieldValue.serverTimestamp());
docRef.update(map.addOnCompleteListener(新的OnCompleteListener(){/*…*/}
使用获取服务器时间戳
Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());
Map msg=newhashmap();
msg.put(“timestamp”,FieldValue.serverTimestamp());
我也有类似的问题,我在我的catlog中发现了这个问题并解决了我的问题
firebaseFirestore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
.setTimestampsInSnapshotsEnabled(true)
.build();
firebaseFirestore.setFirestoreSettings(settings);
我也有类似的问题
我得到了异常
…类型为java.sql.Timestamp,得到了java.util.Date…
,所以我只是将类型从Timestamp
替换为Date
(从java.util.Date
)工作正常。您正在注释一个局部变量,而不是POJO字段。两者之间有很大的区别。使用该注释,您告诉Firestore convertion,当使用POJO时,存储数据库中具有等效名称的字段必须从Firestore tiemstamp转换为date。您必须首先设置时间戳。Firestore不会自动设置时间戳,因为Firestore不知道何时应该设置时间戳,在创建时?在更新时?在一个特定的字段写入时?看看Ali回答,一切都好吗?我可以帮你提供其他信息吗?太好了!现在它工作了,有效地,在pojo类中写入此字段就可以了。谢谢。我得到一个空的Logger.info(“Date”,new YourModelClass().getDate()+”);添加一个包含mcve的新问题,这样我和其他用户也可以帮助你。我什么都没做,我只是复制了上面的模型,并将日期打印在log.d(“Date”,new YourModelClass().getDate()+”)这样的日志上,但我很乐意帮助:)