比较时间戳时 Firestore 查询问题

Sag*_*ada 4 java android firebase google-cloud-firestore

我在 Firestore 中有数据,并且正在比较其中的时间对象。

当我使用其他对象(如"ref" and "title"查询)查询时,会成功返回一些数据,但随着时间的推移,它不会返回任何内容。

在此输入图像描述

String dateString = "9-26-2018";
Run Code Online (Sandbox Code Playgroud)

我将此日期转换为timestamp并传入查询:

Timestamp timestamp = new Timestamp(dateString);

DateFormat df = DateFormat.getDateTimeInstance();
df.setTimeZone(TimeZone.getTimeZone("UTC"));
Date utcTime = new Date(df.format(date));

System.out.println("MyDates >>" +utcTime + " >> "+ timestamp.toDate());

CollectionReference ref = db.collection("news");
Query newsQuery = ref.whereEqualTo("time", utcTime );

mNewsList.clear();
newsQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                @Override
                public void onComplete(@NonNull Task<QuerySnapshot> task) {
                    if (task.isSuccessful()) {
                        System.out.println("DocumentData >> " + task.getResult().size());
                        for (QueryDocumentSnapshot document : task.getResult()) {
                            News news = document.toObject(News.class);
                            mNewsList.add(news);
                        }
                        // refreshing recycler view
                        mAdapter.notifyDataSetChanged();

                        // stop animating Shimmer and hide the layout
                        mShimmerViewContainer.stopShimmerAnimation();
                        mShimmerViewContainer.setVisibility(View.GONE);
                    } else {
                        System.out.println("Error getting documents."+ task.getException());
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

我得到的是task.getResult().size() = 0

所以我的问题是如何比较 Firestore 中的时间戳?

更新 >> 日期输出 >>

MyDates >>Tue Sep 25 18:30:00 GMT+05:30 2018 >> Wed Sep 26 00:00:00 GMT+05:30 2018
Run Code Online (Sandbox Code Playgroud)

Ale*_*amo 5

您之所以得到这个结果是task.getResult().size() = 0因为您将查询whereEqualTo()作为第二个参数传递给该方法,这是一个基元long而不是一个Date对象。为了正确使用Firestore Query的whereEqualTo(String field, Object value)方法,请在使用之前将long值转换为Date对象,如下所示:

long time = 1538306225;
Timestamp timestamp = new Timestamp(time);
Date date = new Date(timestamp.getTime());
Query newsQuery = ref.whereEqualTo("time", date);
Run Code Online (Sandbox Code Playgroud)