android - 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 子句未返回任何数据或指定行数的根本原因的帮助将不胜感激。
解决方案
函数datetime('now', '-1 year')
将时间戳返回为 '%Y-%m-%d %H:%M:%S',例如 2019-05-28 23:29:42 ( docs )。要获取自纪元以来的毫秒数,请1000 * strftime('%s', datetime('now', '-1 year'))
改用。
推荐阅读
- python - 循环文件时python枚举超出范围
- c++ - 这种情况有解决方案吗?
- flutter - Flutter 在 Mailer 包中附加一个 pdf 文件
- javascript - 从 Laravel 项目中的 Javascript Helper 函数获取基本 URL
- python - 使用 pandas 和 praw
- pdf - 如何使用来自 angular/javascript 的 USB 令牌证书签署 pdf
- java - Java Tcp客户端消息对比
- tensorflow - 当通过“张量”损失时需要“磁带”
- skyve - 如何在 Bizlet preSave 中保存未自动保存的相关记录
- database - 将图像 url 存储在数据库中或在需要时为读取繁重的应用程序计算