Android Комната: возвращать ряды по выбранной дате, например -7 дней и т. Д. - PullRequest
0 голосов
/ 29 мая 2020

Я пересмотрел базу данных моей комнаты с String Dates на Date, которая хранится как Long, используя преобразователи типов. Я не могу отфильтровать свои результаты по конкретным c временам, например -7 дней или 3 месяца и т.д. c. Вот моя конфигурация:

QUERY

 SELECT *
 FROM moodBeforetable
 WHERE moodBeforetable.workoutDate >= datetime('now', '-1 year')
 ORDER BY moodBeforetable.workoutDate DESC
 LiveData<List<WorkoutLogsAllPojo>> getAllMoodLogs();

Запрос отлично работает, когда предложение WHERE закомментировано, однако, если я включу эту строку выше, данные не будут возвращены.

Эта переменная moodBeforetable.workoutDate является DATE, но хранится в базе данных как Long: 1590705660000

Type Converter

    @TypeConverter
    public static Date toDate(Long timestamp){
    return timestamp == null ? null : new Date(timestamp);
    }

    @TypeConverter
    public static Long toTimestamp(Date date){
    return date == null ? null : date.getTime();
    }  

Любая помощь по root причине, почему предложение WHERE Мы будем очень признательны, если не вернем никаких данных или указанное количество строк.

1 Ответ

1 голос
/ 29 мая 2020

Функция datetime('now', '-1 year') возвращает метку времени как '% Y-% m-% d% H:% M:% S', например, 2019-05-28 23:29:42 ( docs ) . Чтобы получить количество миллисекунд с начала эпохи, используйте вместо этого 1000 * strftime('%s', datetime('now', '-1 year')).

...