如何使用服务器时
我试图设置历元公司的FireStore创建数据时,设定的FireStore时代。我正在使用ServerValue.TIMESTAMP
来获得与实时数据库中的结果类似的结果。如何使用服务器时
我不想通过使用设备时间System.getCurrentMillis
来设置它,因为用户可以更改该时间。
根据docs的更新需要做的,与问题的格式。这是我的代码:
Map<String, Object> map = new HashMap<>();
map.put("timestamp", FieldValue.serverTimestamp());
reference.update(map);
这是结果在火力地堡Web控制台:
我很惊讶它是在西班牙,这可能是在某些情况下,但时代有用是我追逐的。尝试看到明亮的一面,并坚持下去,并认为我看到了西班牙语网页,所以我改变了页脚选择器的语言,它没有改变。在这一点上,我假设在项目语言中设置。
回到划时代的尝试。考虑到我的项目是使用实时数据库,以及,我尝试设置它以这种方式:
Map<String, Object> map = new HashMap<>();
map.put("timestamp", ServerValue.TIMESTAMP);
reference.update(map);
它确实上传的东西,但它只是无稽之谈。
我想用划时代的服务器端的时间戳是一个更好的标准方法,以后每个客户端都可以将其转化为用户带来方便和语言环境。
能否时代被设定为公司的FireStore服务器值?
UPDATE
答案标记为正确引导我一些,我想和大家分享有趣的发现,让其他人在同样的情况可以受益于:
- 没有必要由于
FieldValue.serverTimestamp()
是由数据库处理的日期对象,所以我们在控制台中看到的只是一种友好的方式来显示它。 - 由于
FieldValue.serverTimestamp()
是一个日期对象,它可以按照任何其他时间戳进行排序,如果您将orderBy("timestamp", Query.Direction.DESCENDING)
添加到您的查询(或Query.Direction.ASCENDING
)它将正确排序结果。 - 和关于所涉及的@ 34m0评论,这是正确的,客户不应该照顾逻辑的设置创建或更新的时间,但它应该在函数来完成,特别是考虑更新需要在完成客户端设置值。相反在执行写入时,它可以直接设置实时数据库是如何实现的,在公司的FireStore它可以通过使用
Map
整个对象来完成,但打破POJO目的。
设置Firestore字段的结果为FieldValue.serverTimestamp()的对象是java.util.Date的实例。当您稍后阅读该值时,可以使用getTime()获得历元时间。
举个例子,像这样创建的文档:
Map<String, Object> doc = new HashMap<>();
doc.put("timestamp", FieldValue.serverTimestamp());
结果值可以这样写:
docRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
@Override
public void onComplete(@NonNull Task<DocumentSnapshot> task) {
if (task.isSuccessful()) {
DocumentSnapshot snapshot = task.getResult();
if (snapshot != null) {
Map<String,Object> map = snapshot.getData();
Date date = (Date) map.get("timestamp");
Log.d(TAG, "date=" + date);
Log.d(TAG, "time=" + date.getTime());
} else {
Log.d(TAG, "No such document");
}
} else {
Log.d(TAG, "get() failed with ", task.getException());
}
}
});
谢谢,我正在更新我的答案,添加一些调查结果,你的回复帮助我的数字 – cutiko
你可以只找到客户端道格对价值建议,或者你可以考虑使用云功能。 – 34m0
@ 34m0我在此,只是让你知道我已经更新我的问题 – cutiko