Clould Firestore-具有日期类型的字段的查询

时间:2019-04-02 01:55:52

标签: java android firebase google-cloud-firestore

我很难执行日期类型(时间戳)的查询。在cCoud Firestore中查询日期字段的正确方式将是什么?

    String created_view = editTextDataFilter.getText().toString();
    String time_variable= "";

    try {

        time_variable= new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy", Locale.ENGLISH).format(new SimpleDateFormat(
                "dd/mm/yyyy", Locale.ENGLISH).parse(created_view));

    }catch (ParseException e){}


db.collection("Students")
            .whereGreaterThan("created_at", time_variable)
            .get()
            .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {

                        for (QueryDocumentSnapshot document : task.getResult()) {

                            alunosList.add(
                                    new Students(
                                            document.getString("name").toUpperCase(),
                                            document.getString("classroom"),
                                            document.getDate("created_at")));


                            recyclerView.setAdapter(adapter);
                        }
                    }
                    else {
                        Log.w(TAG, "Error getting documents.", task.getException());
                    }
                }
            });


}

Field Timestamp

我希望输出带来的记录的日期大于在“ time_variable”中输入的值,但目前找不到值。

1 个答案:

答案 0 :(得分:0)

为了能够基于时间戳查询Firestore数据库,您需要将Date对象传递给CollectionReference的whereGreaterThan(FieldPath fieldPath, Object value)方法。传递一个字符串(如您当前所做的那样),将无法使您的查询正常工作。

将起作用的查询应如下所示:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = dateFormat.parse(created_view);
db.collection("Students")
        .whereGreaterThan("created_at", date)
        .get()
        .addOnCompleteListener(/* ... */);

如果要以编程方式添加时间戳,请从以下代码中查看我的答案: