在Android Room中查询日期

问题描述 投票:0回答:2

我有一个表

todo_db
,其中有一列
dueDate
,我想运行一个查询来选择所有
dueDate
类似于给定日期的位置。

我在我的 Dao 中写了这个查询

    @Query("SELECT * FROM todo_db WHERE dueDate LIKE :givenDate")
    List<todoEnt> getGivenDate(Date givenDate);

要使用它,我调用数据库的实例,我使用 Calendar 的实例并使用 getTime()

Calendar c;
Date dateToday;

c = Calendar.getInstance();
dateToday = c.getTime();

datalist = db.Maindao().getGivenDate(dateToday);

我已经尝试过

SELECT * FROM todo_db WHERE dueDate = :givenDate

SELECT * FROM todo_db WHERE dueDate < (strftime('%s', 'now'))

感谢您提供的任何帮助。非常感谢!

编辑:

我有 TypeConverter 并且 dueDate 是 Date

@Entity(tableName = "todo_db")
public class todoEnt {
    @PrimaryKey(autoGenerate = true)
    public int id;

    @ColumnInfo(name = "title")
    public String todoTitle;

    @ColumnInfo(name = "description")
    public String todoDescription;

    @ColumnInfo(name = "dueDate")
    public Date todoDueDate;

}


public class Convertors {
    @TypeConverter
    public Date fromTimeStamp(Long value){
        return value == null ? null : new Date(value);
    }

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

}
java date android-room
2个回答
2
投票

在方法中使用 long 而不是 date。请记住,房间内部将日期存储为长整数。

所以在你的 DAO 中你应该有类似的东西......

@Query("SELECT * FROM todo_db WHERE dueDate = :givenDateInLong")
getGivenDate(long givenDateInLong)  

那么你的代码就会像...

Calendar c;
Date dateToday;

c = Calendar.getInstance();
dateToday = c.getTime();
long dateTodayInLong = dateToday.getTime();

datalist = db.Maindao().getGivenDate(dateTodayInLong);

0
投票

我的例子是这样的。我使用从一天开始和一天结束开始的 2 个日期

@Query("Select * From Tillsession c  where  c.users=:user and c.status='ENDED' and (c.logout)>=:frm and c.logout<=:to")
List<Tillsession> getTillsessions(Users user, Date frm,Date to);

我使用日历类从一天的开始和一天的结束获得两个日期,如下所示

Calendar c = Calendar.getInstance();
c.setTime(date);
c.set(Calendar.HOUR, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
Date fromd = c.getTime();
c.set(Calendar.HOUR, 23);
c.set(Calendar.MINUTE, 59);
c.set(Calendar.SECOND, 59);
c.set(Calendar.MILLISECOND, 999);
Date to = c.getTime();

getTillsessions(user, fromd,to);
© www.soinside.com 2019 - 2024. All rights reserved.