如何使用服务器时

问题描述:

我试图设置历元公司的FireStore创建数据时,设定的FireStore时代。我正在使用ServerValue.TIMESTAMP来获得与实时数据库中的结果类似的结果。如何使用服务器时

我不想通过使用设备时间System.getCurrentMillis来设置它,因为用户可以更改该时间。

根据docs的更新需要做的,与问题的格式。这是我的代码:

Map<String, Object> map = new HashMap<>(); 
map.put("timestamp", FieldValue.serverTimestamp()); 
reference.update(map); 

这是结果在火力地堡Web控制台:

enter image description here

我很惊讶它是在西班牙,这可能是在某些情况下,但时代有用是我追逐的。尝试看到明亮的一面,并坚持下去,并认为我看到了西班牙语网页,所以我改变了页脚选择器的语言,它没有改变。在这一点上,我假设在项目语言中设置。

回到划时代的尝试。考虑到我的项目是使用实时数据库,以及,我尝试设置它以这种方式:

Map<String, Object> map = new HashMap<>(); 
map.put("timestamp", ServerValue.TIMESTAMP); 
reference.update(map); 

它确实上传的东西,但它只是无稽之谈。

enter image description here

我想用划时代的服务器端的时间戳是一个更好的标准方法,以后每个客户端都可以将其转化为用户带来方便和语言环境。

能否时代被设定为公司的FireStore服务器值?

UPDATE

答案标记为正确引导我一些,我想和大家分享有趣的发现,让其他人在同样的情况可以受益于:

  • 没有必要由于FieldValue.serverTimestamp()是由数据库处理的日期对象,所以我们在控制台中看到的只是一种友好的方式来显示它。
  • 由于FieldValue.serverTimestamp()是一个日期对象,它可以按照任何其他时间戳进行排序,如果您将orderBy("timestamp", Query.Direction.DESCENDING)添加到您的查询(或Query.Direction.ASCENDING)它将正确排序结果。
  • 和关于所涉及的@ 34m0评论,这是正确的,客户不应该照顾逻辑的设置创建或更新的时间,但它应该在函数来完成,特别是考虑更新需要在完成客户端设置值。相反在执行写入时,它可以直接设置实时数据库是如何实现的,在公司的FireStore它可以通过使用Map整个对象来完成,但打破POJO目的。
+1

你可以只找到客户端道格对价值建议,或者你可以考虑使用云功能。 – 34m0

+1

@ 34m0我在此,只是让你知道我已经更新我的问题 – cutiko

设置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()); 
     } 
    } 
}); 
+0

谢谢,我正在更新我的答案,添加一些调查结果,你的回复帮助我的数字 – cutiko