Android 房间 - 检索 30 天的行

Android Room - retrive rows for 30 days

在我的应用程序中,我以日期格式 yyyy/MM/dd HH:mm:ss 捕获 date/time。然后我使用以下类型转换将日期存储为数据库中的 long。

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

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

日期在数据库中存储为:1591353144826

如果我 运行 查询如下: SELECT * 来自 exampleTable 它将 return 所有行都没有问题。

如果我 运行 SELECT * FROM exampleTable WHERE workoutDate >= datetime('now', '-30 day') 没有行 return。我的 objective 是能够按周、月、季度、年等过滤行。但是 WHERE 子句 returns 0 行。我必须删除 return 行的 WHERE 子句。

有人可以帮我解决这个问题的根源吗?我认为使用类型转换器存储日期是能够使用日期时间搜索功能的正确方法。

您的 workoutDate 存储为自纪元以来的毫秒数。 SQLite 函数 strftime() 可用于获取过去所需日期的纪元以来的秒数。乘以 1000 得到毫秒:

SELECT * FROM exampleTable
     WHERE workoutDate >= (1000 * strftime('%s', datetime('now', '-30 day')))