猿问

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

我是 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 getter

public Date getCreatedDateDb() {

    return createdDateDb;

}


// #6 createdDateDb setter

public void setCreatedDateDb(Date createdDateDb) {this.createdDateDb = createdDateDb; }

我真的很感激一些如何处理它的提示,因为感觉我无处可去。我还尝试了以下方法:


SELECT * 

FROM fare 

WHERE createdDateDb BETWEEN datetime('now', 'start of month') AND datetime('now', 'localtime')

不幸的是它也不起作用。


米脂
浏览 333回答 3
3回答

POPMUISE

使用DATESQLITE 函数@Query("SELECT&nbsp;*&nbsp;FROM&nbsp;fare&nbsp;WHERE&nbsp;createdDateDb&nbsp;>=&nbsp;DATE('now',&nbsp;'-30&nbsp;day')")

LEATH

我遇到了这个问题,但我试图从 1 年前开始获取寄存器,当我搜索解决方案时,我发现了这篇文章。我是这样解决的SELECT&nbsp;*&nbsp;FROM&nbsp;my_table&nbsp;WHERE&nbsp;CAST(my_date/1000&nbsp;AS&nbsp;LONG)&nbsp;>=&nbsp;strftime('%s',&nbsp;'now',&nbsp;'-12&nbsp;month')使用 calendar.getTime() 存储数据(以毫秒为单位)解释:由于 strftime 函数返回 SECONDS 的值,我必须将我的毫秒值除以 1000 并将其强制转换为 long,因为 sql 将除法结果作为整数返回,然后它才能正常工作
随时随地看视频慕课网APP

相关分类

Java
我要回答