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");
}
}
谢谢
答案 0 :(得分:0)
首先,如果要以字符串表示形式存储和查询日期,则应将它们存储在ISO 8601 standard上,这会使字符串日期的字典顺序也按时间顺序排列。因此,您应该存储dd-MM-yyyy HH:mm
而不是yyyy-mm-dd 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