有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在firebase中运行查询以检索具有当前日期的对象?

我只希望检索当前日期的对象。我在firebase数据库中有如下JSON结构

尝试了此操作,但没有正确显示任何内容:

Calendar now = Calendar.getInstance();
    int year = now.get(java.util.Calendar.YEAR);
    int month = now.get(java.util.Calendar.MONTH);
    int day = now.get(java.util.Calendar.DAY_OF_MONTH);

query = mDatabase.orderByKey().orderByChild("date").equalTo(now.toString());

Firebase数据库中的示例JSON数据

"n4VB8b3Q7SfRrR8ezdaaUaLRHn93"(uid) : {       
"-LcGXirH22zeZvaFuOzA"(timestamp) : {
  "date" : {
    "date" : 12,
    "day" : 2,
    "hours" : 20,
    "minutes" : 4,
    "month" : 2,
    "seconds" : 0,
    "time" : 1552399440382,
    "timezoneOffset" : -360,
    "year" : 119
  },
  "id" : "-LcGXirH22zeZvaFuOzA",
  "name" : "Testing with year",
  "note" : "with year"
},
"-LcGcoUtkFRtP-ugp2kO" : {
  "date" : {
    "date" : 12,
    "day" : 2,
    "hours" : 20,
    "minutes" : 1,
    "month" : 2,
    "seconds" : 0,
    "time" : 1552399260794,
    "timezoneOffset" : -360,
    "year" : 119
  },
  "id" : "-LcGcoUtkFRtP-ugp2kO",
  "name" : "Testing for today",
  "note" : "Testing for today"
}

我希望输出仅为当前日期的事件


共 (1) 个答案

  1. # 1 楼答案

    Firebase数据库查询只能对单个属性进行排序/筛选。由于已将日期存储在三个单独的属性中,因此只能对其中一个属性进行排序/筛选

    例如,要获取2019年的子节点,需要执行以下操作:

    query = mDatabase.orderByKey().orderByChild("date/year").equalTo(119);
    

    您会注意到,上面使用"date/year"对嵌套的year属性进行排序/筛选


    如果希望能够按整个日期进行筛选,则应以适合筛选的格式将该日期存储在单个属性中。最常见的格式是ISO-8601,它将今天的日期反映为:

    "20190412"
    

    或者

    "2019-04-12"
    

    这两种方法都有一个优点,即它们是按字典顺序排序的:以这种格式将日期作为字符串排序,结果它们也是按时间顺序排列的

    get a Java date in ISO-8601 format使用SimpleDateFormat对象:

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    String nowAsISO = df.format(new Date());
    

    如果您将上述值存储在date/iso中,并希望筛选今天或以后的项目,您应该执行以下操作:

    query = mDatabase.orderByKey().orderByChild("date/is").startAt("2019-04-12");