【问题标题】:How to retrieve data from firebase where the value of a date is 1 month ago from current date如何从日期值是从当前日期起 1 个月前的 firebase 中检索数据
【发布时间】:2019-08-07 22:38:32
【问题描述】:
 SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy HH:mm");
    Calendar c = Calendar.getInstance();
    String date = sdf.format(c.getTime());

我使用此代码获取当前时间。但我想在 1 个月前从 firebase 获取所有数据。我必须添加什么代码?我使用此代码检索所有内容而不进行任何比较

 mDatabasetamu.orderByChild("tglkeluar").equalTo(date).addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                Tamu tamu = snapshot.getValue(Tamu.class);
                String nama = tamu.getNama();
                String checkin = tamu.getTglmasuk();
                String checkout = tamu.getTglkeluar();
                String kamar = tamu.getKamar();

                txtnama.append(nama + "\n \n");
                txtcheckin.append(checkin +"\n \n" );
                txtcheckout.append(checkout + "\n \n");
                txtkamar.append(kamar + "\n \n");

            }
        }

谢谢

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    首先,如果您要将日期存储和查询为字符串表示形式,那么您应该将它们存储在ISO 8601 standard 上,这使得字符串日期的字典顺序也按时间顺序排列。所以你应该存储yyyy-mm-dd HH:mm,而不是dd-MM-yyyy HH:mm

    但请注意将日期存储为字符串,因为您的情况不存储时区。考虑使用Firestore, which as a Timestamp data type,或者如果您将其存储为字符串,请确保您还存储了包括时区在内的完整时间戳格式:yyyy-mm-ddThh:mm:sszzzz

    话虽如此,以您当前的日期格式,您将难以查询上个月的记录,因为您将在结果中包含旧年份的记录。

    但是,如果您将日期存储为yyyy-mm-dd HH:mm,那么您将能够执行以下操作来获取上个月(从一个月前到今天)的所有访客访问。

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");
    
    String today = sdf.format(Calendar.getInstance().getTime());
    String oneMonthAgo = sdf.format(Calendar.getInstance().add(MONTH, -1).getTime());
    
    mDatabasetamu
      .orderByChild("tglkeluar")
      .startAt(oneMonthAgo )
      .endAt(today)
      .addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                    Tamu tamu = snapshot.getValue(Tamu.class);
                    String nama = tamu.getNama();
                    String checkin = tamu.getTglmasuk();
                    String checkout = tamu.getTglkeluar();
                    String kamar = tamu.getKamar();
    
                    txtnama.append(nama + "\n \n");
                    txtcheckin.append(checkin +"\n \n" );
                    txtcheckout.append(checkout + "\n \n");
                    txtkamar.append(kamar + "\n \n");
    
                }
            }
    

    最后,如果您有 SQL 背景,这里有一些很好的视频可以帮助您开始使用 Firebase:The Firebase Database For SQL Developers

    【讨论】:

    • 这行得通,但请记住,如果用户更改手机中的时间,这不会给出我们期望的结果
    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多