首页 > 解决方案 > 使用 LocalDate 从 Firestore 查询两个日期之间的数据

问题描述

我试图从 Firestore 获得两个选定日期之间的订单,但问题是我的查询总是返回 0 个快照/文档。

我正在使用LocalDate类,因为我有一个 JavaFX 程序,并且日期选择器也返回 LocalDate。我知道 Firestore 正在使用它的时间戳,但我不确定如何正确地将 LocalDate 转换为 Firestore 时间戳。尝试使用 java.sql.Timestamp,但它不起作用。有什么建议么?

private static LocalDate dateFrom, dateTo;   
//...//

    Query query = null;
                if (dateTo == null) {
                    dateTo = LocalDate.now();

                    Timestamp timeTo = Timestamp.valueOf(dateTo.atStartOfDay());
                    Timestamp timeFrom = Timestamp.valueOf(dateFrom.atStartOfDay());
                    query = orderRef.whereLessThanOrEqualTo("orderTimestamp", timeTo).whereGreaterThan("orderTimestamp", timeFrom);
                } else if (dateTo.equals(dateFrom)) {
                    Timestamp timeFrom = Timestamp.valueOf(dateFrom.atStartOfDay());
                    query = orderRef.whereEqualTo("orderTimestamp", timeFrom);
                } else {
                    Timestamp timeTo = Timestamp.valueOf(dateTo.atStartOfDay());
                    Timestamp timeFrom = Timestamp.valueOf(dateFrom.atStartOfDay());
                    query = orderRef.whereLessThanOrEqualTo("orderTimestamp", timeTo).whereGreaterThan("orderTimestamp", timeFrom);
                }

标签: javaandroidfirebasegoogle-cloud-firestore

解决方案


我在您的数据库中看到,您的orderTimestamp属性包含时间戳值,这是正确的。如果你想查询数据库,你可以简单地传递一个Date对象whereLessThanOrEqualTo()作为第二个参数。看,这个类是包的一部分。无需将任何日期值转换为时间戳。java.util


推荐阅读