java - 如何在 Android 设备中从 Firestore 获取服务器时间戳?

标签 java android firebase google-cloud-firestore

这与这个问题相关:How can I get Timestamp from Firestore server without bothering for the case when device clock is out of sync with Firestore

我了解 FieldValue.serverTimestamp() 可用于在执行数据库操作时在 Firestore 服务器中生成时间戳。我想了解如何从特定设备中的 Firestore 数据库以 Date/Timestamp 格式获取时间戳,而无需任何数据库相关操作。

最佳答案

假设您有一个如下所示的数据库架构:

Firestore-root
   |
   --- users (collection)
        |
        --- uidOne (document)
              |
              --- name: "UserOne"
              |
              --- creationDate: January 25, 2020 at 3:37:59 PM UTC+3 //Timestamp

要以 Date 对象的形式获取 creationDate 属性的值,请使用以下代码行:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference usersRef = rootRef.collection("users");
usersRef.document(uid).get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
    @Override
    public void onComplete(@NonNull Task<DocumentSnapshot> task) {
        DocumentSnapshot document = task.getResult();
        if (document.exists()) {
            Date creationDate = document.getDate("creationDate");
            //Do what you need to do with your Date object
        }
    }
});

请记住,为了获取此 Date 对象,应按照我在以下帖子中的回答中的说明来设置日期:

编辑:

The question emphasized to get the Server Timestamp without performing any database related operation.

您无法执行此操作,因为该时间戳值完全由 Firebase 服务器生成。换句话说,当发生写操作时,就会生成该时间戳。您无法在客户端上模拟这一点,这是有道理的,因为您无法自己随机生成服务器时间戳。只有 Firebase 服务器可以做到这一点。如果您需要特定的时间戳,则不应以这种方式生成它。由于该属性的类型为 Date,因此您可以将其设置为您喜欢的任何日期。因此,不要让 Firestore 决定生成什么时间戳,而是自己设置日期

关于java - 如何在 Android 设备中从 Firestore 获取服务器时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59908720/

相关文章:

java - 版本号指标

java - log4j 日志正在写入 catalina.out 文件

java - 如何校准磁传感器?

java - 当最外层元素具有 xmlns 属性时,如何在camel中使用xpath?

java - 查询 firebase 数据库并从 2 个节点检索

Android 4.4 Kitkat 自定义 View 操作栏未填充整个宽度

java - 创建颜色函数

android - recyclerView 中的数据绑定(bind)

java - Firebase Admin SDK 在执行 .jar 文件时抛出 NoSuchMethodError

firebase - 加速云功能