【问题标题】:Android Room - retrive rows for 30 daysAndroid Room - 检索 30 天的行
【发布时间】:2020-06-05 22:19:21
【问题描述】:

在我的应用程序中,我以日期格式 yyyy/MM/dd HH:mm:ss 捕获日期/时间。然后我使用以下类型转换将日期作为 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 * FROM exampleTable WHERE exerciseDate >= datetime('now', '-30 day') 不会返回任何行。我的目标是能够按周、月、季度、年等过滤行。但是 WHERE 子句返回 0 行。我必须删除 WHERE 子句才能返回行。

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

【问题讨论】:

  • 您需要先将您的锻炼日期转换为日期时间。试试看:SELECT * FROM exampleTable WHERE datetime(workoutDate, 'unixepoch') >= datetime('now', '-30 day')
  • 很遗憾这不起作用

标签: android sqlite android-sqlite android-room


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-19
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 1970-01-01
    • 2020-06-29
    相关资源
    最近更新 更多