首页 > 解决方案 > Android Room:按自定义日期返回行,即 -7day 等

问题描述

我已经使用类型转换器对我的房间数据库从 String Dates 到 Date 进行了大修,该数据库存储为 Long。我无法过滤特定时间(例如 -7 天或 3 个月等)的结果。这是我的配置:

询问

 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

类型转换器

    @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();
    }  

任何有关 WHERE 子句未返回任何数据或指定行数的根本原因的帮助将不胜感激。

标签: androidandroid-room

解决方案


函数datetime('now', '-1 year')将时间戳返回为 '%Y-%m-%d %H:%M:%S',例如 2019-05-28 23:29:42 ( docs )。要获取自纪元以来的毫秒数,请1000 * strftime('%s', datetime('now', '-1 year'))改用。


推荐阅读