我了解 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/