Как очищать sharedPreferences каждый новый день

Нужно очищать sharedPreferences каждый день. Пробовал гуглить, но не нашел.

Думаю, что можно как-то сохранять дату (день, год, месяц) в sharedPreferences и при запуске приложения каждый раз сравнивать с сохраненной и если они не равны, то удалять все по ключам из sharedPreferences и создавать уже новую дату. Но не знаю как получить дату в таком формате, чтобы можно было без проблем сравнить.


Ответы (1 шт):

Автор решения: Vlad Orlinskas

Важно решить, когда по вашему начинается новый день, например будем считать, что новый день начинается в полночь.

fun getLastValidTimestamp(): Long {
        val day = Calendar.getInstance()
        day[Calendar.MILLISECOND] = 0
        day[Calendar.SECOND] = 0
        day[Calendar.MINUTE] = 0
        day[Calendar.HOUR_OF_DAY] = 0
        return day.time.time
}

Этот метод вернет временную метку полночи, которая уже была.

Что бы решить наступил ли новый день нужно:

  1. Сохранить результат метода getLastValidTimestamp(). (Только при первом запуске, когда у вас дефолтное значение)
  2. При каждом запуске сравнить сохраненный результат с новым

Пример условия:

fun isNewDay(lastValue: Long): Boolean {
    return getLastValidTimestamp() > lastValue
}

Где lastValue последний сохраненный результат из пункта 1.

  1. В случаи если метод isNewDay вернул true, необходимо повторить пункт 1.

Пример на java

public long getLastValidTimestamp() {
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.MILLISECOND, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        return calendar.getTime().getTime();
}
→ Ссылка