为了账号安全,请及时绑定邮箱和手机立即绑定

Android Room - 返回过去 30 天(1 个月) - java

Android Room - 返回过去 30 天(1 个月) - java

米脂 2021-08-19 17:48:26
我是 Android 开发的完全初学者,遇到了一个相当简单的问题(我猜是 ;))。我正在尝试从 SQLite(使用 Room)检索过去 30 天的记录。这是我的查询不起作用 - 它不返回任何记录(来自@Dao 类): // getting fares for one day (custom-made query)@Query("SELECT * FROM fare WHERE createdDateDb >=datetime('now', 'now', '-30 day')")public List<Fare> getFaresOneDay();但是,这个简单的查询检索所有没有指定日期的记录确实有效: // getting all fare (via custom-made query)@Query("SELECT * FROM fare ORDER BY createdDateDb DESC")public List<Fare> getAllFares();这是我的 DateTypeConverter 类:public class DateTypeConverter {    @TypeConverter    public long convertDateToLong(Date date) {        return date.getTime();    }    @TypeConverter    public Date convertLongToDate(long time) {        return new Date(time);    }}这是将值分配给 createdDateDb 的方式(在将其插入数据库之前):fare.setCreatedDateDb(new Date());这是我的“实体”类:@Entity(tableName = "fare")public class Fare {    private String fareValue;    private String typeOfJob;    @PrimaryKey(autoGenerate = true) @NonNull    private Integer jobId;    // dates used for user display    private String createdDate;    private String createdTime;    // date var used for comparisons - not to be displayed for the user    private Date createdDateDb;}以及 createdDateDb 的 setter 和 getter// #6 createdDateDb getterpublic Date getCreatedDateDb() {    return createdDateDb;}// #6 createdDateDb setterpublic void setCreatedDateDb(Date createdDateDb) {this.createdDateDb = createdDateDb; }我真的很感激一些如何处理它的提示,因为感觉我无处可去。我还尝试了以下方法:SELECT * FROM fare WHERE createdDateDb BETWEEN datetime('now', 'start of month') AND datetime('now', 'localtime')不幸的是它也不起作用。
查看完整描述

3 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

使用DATESQLITE 函数

@Query("SELECT * FROM fare WHERE createdDateDb >= DATE('now', '-30 day')")


查看完整回答
反对 回复 2021-08-19
?
LEATH

TA贡献1936条经验 获得超6个赞

我遇到了这个问题,但我试图从 1 年前开始获取寄存器,当我搜索解决方案时,我发现了这篇文章。我是这样解决的

SELECT * FROM my_table WHERE CAST(my_date/1000 AS LONG) >= strftime('%s', 'now', '-12 month')

使用 calendar.getTime() 存储数据(以毫秒为单位)

解释:

由于 strftime 函数返回 SECONDS 的值,我必须将我的毫秒值除以 1000 并将其强制转换为 long,因为 sql 将除法结果作为整数返回,然后它才能正常工作


查看完整回答
反对 回复 2021-08-19
  • 3 回答
  • 0 关注
  • 332 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信