【问题标题】:Firestore query issue when comparing timestamp比较时间戳时的 Firestore 查询问题
【发布时间】:2019-03-05 14:45:58
【问题描述】:

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

当我使用 "ref" and "title" 等其他对象进行查询时,查询成功返回了一些数据,但随着时间的推移,它没有返回任何内容。

String dateString = "9-26-2018";

我正在将此日期转换为 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());
                    }
                }
            });

我得到的是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

【问题讨论】:

    标签: java android firebase google-cloud-firestore


    【解决方案1】:

    您得到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);
    

    【讨论】:

    • 我按照您上面提到的确切方式进行了操作,但它没有返回任何结果。 :(我的问题与这个问题完全相同。当我将 whereEqual 用于其他字段时,它可以完美运行,但不适用于时间戳。请帮助我:)
    • @IsuruBandara 没有看到您正在使用的代码,很难说出哪里出了问题。因此,请使用自己的MCVE 发布一个新问题,以便我和其他 Firebase 开发人员可以帮助您。
    • 我找到了解决方案。我不得不多次* 1000 否则它不会显示任何结果:D.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 2020-07-10
    • 2019-02-14
    相关资源
    最近更新 更多