java - 如何自动从 Firebase 中删除?
问题描述
我编写了一个程序来从 firebase 中删除帖子。当 currentDate == 参考(“发布”)时。Child (postKey) .child ("date") 然后帖子应该被删除。检查通过每个(新线程) 24 小时我不明白为什么他没有得到帖子
private void deletePostFromFirebase(){
new Thread(new Runnable() {
@Override
public void run() {
while(true) {
try {
Thread.sleep(1000L*60L*60L*24L);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd MMM yyyy", Locale.ENGLISH);
Date date = new Date();
String newDate = simpleDateFormat.format(date);
DatabaseReference ref = FirebaseDatabase.getInstance().getReference("Posts");
ref.orderByChild("date").equalTo(newDate).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot itemSnapshot : dataSnapshot.getChildren()) {
itemSnapshot.getRef().removeValue();
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
throw databaseError.toException();
}
});
}catch (InterruptedException e){
showMessage(e.getMessage());
}
}
}
}).start();
}
我认为用firebase(post.child -> date'30 апр 2020')写的日期是用俄语格式写的,我得到的当前日期是currentDate'30 april 2020'英文格式。我认为这是一个问题。有人可以向我解释一下还是有其他问题。
解决方案
如果您希望能够按日期排序/过滤,则需要确保这些日期以可以排序/过滤的格式存储。
toString()
您用于日期的表示不是这样的格式,因为它的字典/字母排序顺序与其时间排序顺序不同。一些例子可以说明这一点:
- 按字典顺序
30 January
排在 之后28 February
,因为3
>2
。 - 按字典顺序
January 30
排在 之后February 28
,因为J
>F
。
存储日期以便您对它们进行排序/过滤的正确格式是:
- 将它们存储为时间戳,这是自纪元以来经过的毫秒数。由于这些是数值,因此可以按数字而不是按字典顺序对它们进行排序和比较。
- 以字符串格式存储它们,其中字典顺序与时间顺序相同,例如:
"2020-04-16"
. 因为"2020-01-30"
<"2020-02-28"
.
有关这方面的更多信息,请参阅:
推荐阅读
- vba - 如果特定列具有数值,则复制数组
- vb.net - 如何使用连接密码使用 Vb.net 打开 Microsoft Access 数据库
- java - 如何使用 Java 为文件夹中的文件提供静态字符串?
- node.js - 如何杀死在 localhost:8080 上为计算机上不存在的旧站点提供服务的 Node 进程
- sabre - 测试 API 工作流 -session createRQ-FAILED
- r - 无法在 RStudio 中加载插入符号库
- javascript - Chrome 扩展:如何在其中运行的内容脚本中获取 tabId
- matlab - 替换每个包含 '#' 的字符串
- wordpress - WP - 子主题获取主题目录
- swift - 我的自定义 SKNode 没有调用 onTouchesBegan()