如何在“n”天

时间:2016-05-28 17:24:05

标签: java android firebase firebase-realtime-database

我想删除我的Friebase中的一些旧数据。我知道这个问题在这里问了很多,但我仍然很难让它发挥作用。

我尝试在此处找到此解决方案:

Firebase chat - removing old messages

但这已被弃用。

所以我这样试试:

ChildEventListener childEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {

        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_MONTH, -30);


        Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());

        String key = dataSnapshot.getKey();

        Marker retrievemarker =dataSnapshot.getValue(Marker.class);
        Calendar t3 = new           
        GregorianCalendar
        (c.get(Calendar.YEAR),
         c.get(Calendar.MONTH),
         retrievemarker.getSavedate());

        int date1= calendar.get(Calendar.DATE);
        int date2= t3.get(Calendar.DATE);

        Log.d("date1",""+date1);
        Log.d("date2",""+date2);

        if( date1 == date2 ){

            myRef.child(key).setValue(null);

        }

解释: 在我的Firebase中,我保存了一个名为Marker的对象,该对象有一个变量来存储已保存的对象,即Firebase中保存对象的日期。

int date = c.get(Calendar.DATE);
marker.setSavedate(date);

我希望在30天后删除Firebase中的对象。因此,我尝试从今日日期中减去30天,而不是将其与来自对象的已保存项进行比较,如果它等于我将从Firebase中删除该对象。

对于Substraction我参考以下答案:

How to subtract X days from a date using Java calendar?

但它不起作用。如果我今天向Firebase添加一个对象,那么两个日期总是相等的。 所以我猜减法不起作用。

我做错了什么?

3 个答案:

答案 0 :(得分:11)

假设您有一个带有节点的数据结构:

-KItqNxLqzQoLnUCb9sJaddclose
  time: "Thu Apr 28 17:12:05 PDT 2016"
  timestamp: 1461888725444

每个此类节点都有一个timestamp属性,指示何时创建它。您最好设置此属性using Server Timestamp

使用此数据结构,您可以轻松构建仅返回超过30天的项目的查询并将其删除:

long cutoff = new Date().getTime() - TimeUnit.MILLISECONDS.convert(30, TimeUnit.DAYS);
Query oldItems = ttlRef.orderByChild("timestamp").endAt(cutoff);
oldItems.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot snapshot) {
        for (DataSnapshot itemSnapshot: snapshot.getChildren()) {
            itemSnapshot.getRef().removeValue();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
});

答案 1 :(得分:1)

我的Firebase结构就像 - > firebaseurl.com/test/user_id/2017-05-12然后我的数据按时间结构 所以我正在使用

long cutoff = new Date().getTime()-TimeUnit.MILLISECONDS.convert(10, TimeUnit.DAYS);

//Get days number for delete data
Date d = new Date(cutoff );
SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd");
String old_date = `dateFormatGmt.format(new Date(cutoff));

// Get date of deleting content
ref2 = new Firebase("firebaseurl.com/test/user_id/" + user_id);    // Firebase url
ref2.child(old_date).removeValue();    //Remove element

它对我有用

答案 2 :(得分:0)

另一种选择是将PubSub的谷歌云与Firebase中的Schedule Functions一起使用,我正在使用并且我整天(每天都在阅读文件),并验证日期(在创建文件中注册) )是>今天的日期,那么,我必须从Firestore中删除该文档;