开发者问题收集

如何使用Android在Firestore中添加时间戳?

2018-01-27
12576

我正在尝试使用 Firebase Firestore 在 Android 客户端中添加时间戳字段。

根据 文档

Annotation used to mark a Date field to be populated with a server timestamp. If a POJO being written contains null for a @ServerTimestamp-annotated field, it will be replaced with a server-generated timestamp.

但是当我尝试时:

@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);

在 Cloud Firestore 数据库中,此字段始终为 null

3个回答

这不是将时间和日期添加到 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 服务器将读取您的 date 字段,因为它是一个 ServerTimestamp (参见注释),并且它会相应地使用服务器时间戳填充该字段。

另一种方法是使用 FieldValue.serverTimestamp() 方法,如下所示:

Map<String, Object> map = new HashMap<>();
map.put("date", FieldValue.serverTimestamp());
docRef.update(map).addOnCompleteListener(new OnCompleteListener<Void>() {/* ... */}
Alex Mamo
2018-01-27

使用 FieldValue.serverTimestamp() 获取服务器时间戳

Map<String, Object> msg = new HashMap<>();
msg.put("timestamp", FieldValue.serverTimestamp());
Ali Faris
2018-01-27

我遇到了类似的问题,我在我的 catlog 中找到了这个问题并解决了它

firebaseFirestore = FirebaseFirestore.getInstance();
FirebaseFirestoreSettings settings = new FirebaseFirestoreSettings.Builder()
                .setTimestampsInSnapshotsEnabled(true)
                .build();
firebaseFirestore.setFirestoreSettings(settings);
RickyS
2018-06-26