You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用DatePickerDialog选择的日期查询Firestore的Timestamp数据

实现方案

可以仅通过日期选择器返回的日期完成Firestore带时间戳字段的文档查询,核心思路是构造选中日期的时间范围边界做范围查询即可。

具体实现步骤

  1. 首先修改onDateSet中的代码,构造选中日期的起始和结束时间戳:
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
    // 构造选中日期当天0点的Calendar实例
    Calendar startCal = Calendar.getInstance();
    startCal.set(Calendar.YEAR, year);
    startCal.set(Calendar.MONTH, month);
    startCal.set(Calendar.DATE, dayOfMonth);
    startCal.set(Calendar.HOUR_OF_DAY, 0);
    startCal.set(Calendar.MINUTE, 0);
    startCal.set(Calendar.SECOND, 0);
    startCal.set(Calendar.MILLISECOND, 0);
    // 转成Firestore的Timestamp
    Timestamp startTime = new Timestamp(startCal.getTime());

    // 构造次日0点的Calendar实例,作为查询的上界
    Calendar endCal = Calendar.getInstance();
    endCal.setTime(startCal.getTime());
    endCal.add(Calendar.DATE, 1);
    Timestamp endTime = new Timestamp(endCal.getTime());

    // 执行Firestore查询
    queryFirestoreByTimeRange(startTime, endTime);
}
  1. 编写Firestore范围查询方法,以下示例假设你存储时间戳的字段名为create_time:
private void queryFirestoreByTimeRange(Timestamp startTime, Timestamp endTime) {
    FirebaseFirestore db = FirebaseFirestore.getInstance();
    // 替换为你自己的集合名
    db.collection("你的集合名称")
        .whereGreaterThanOrEqualTo("create_time", startTime)
        .whereLessThan("create_time", endTime)
        .get()
        .addOnCompleteListener(task -> {
            if (task.isSuccessful()) {
                for (QueryDocumentSnapshot document : task.getResult()) {
                    // 处理查询到的文档逻辑
                    Log.d("QUERY_RESULT", document.getId() + " => " + document.getData());
                }
            } else {
                Log.w("QUERY_ERROR", "查询文档出错", task.getException());
            }
        });
}

原理解释

Firestore的Timestamp是精确到纳秒的时间值,我们把查询范围限定在选中日期的0点到次日0点前,就能匹配到当天任意时间点写入的、时间戳字段落在这个区间的所有文档,不需要额外处理时间部分的匹配。

内容的提问来源于stack exchange,提问作者Patrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:48:04