Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java strftime(“%m”,date)仅在2个月内返回错误的月份值_Java_Android_Android Sqlite_Android Room_Mpandroidchart - Fatal编程技术网

Java strftime(“%m”,date)仅在2个月内返回错误的月份值

Java strftime(“%m”,date)仅在2个月内返回错误的月份值,java,android,android-sqlite,android-room,mpandroidchart,Java,Android,Android Sqlite,Android Room,Mpandroidchart,我一直在四处寻找一些答案,但我仍然对这个问题感到困惑 我正在使用Room,我有一个数据库,在其中我以以下格式存储日期: “YYYY-MM-DDTHH:MM:SS.sss”,因为我使用LocalDateTime.now创建它们 我正在尝试执行一个查询,以获取日期介于开始日期和结束日期之间的项目,两者的格式均为“YYYY-MM-DD”。我从DatePickerDialog获取值,因此没有时间附加 我尝试了这两个查询,都给出了错误的结果: @Query("SELECT strftime('%m-%Y'

我一直在四处寻找一些答案,但我仍然对这个问题感到困惑

我正在使用Room,我有一个数据库,在其中我以以下格式存储日期: “YYYY-MM-DDTHH:MM:SS.sss”,因为我使用LocalDateTime.now创建它们

我正在尝试执行一个查询,以获取日期介于开始日期和结束日期之间的项目,两者的格式均为“YYYY-MM-DD”。我从DatePickerDialog获取值,因此没有时间附加

我尝试了这两个查询,都给出了错误的结果:

@Query("SELECT strftime('%m-%Y',date) as month, COUNT(*) as total from items 
WHERE date>= :start_date AND date< :end_date GROUP BY strftime('%m-%Y',date)")

LiveData<List<Result>> getResult(String start_date, String end_date);
编辑2:这篇文章很长,所以我正在编辑,只留下相关信息以及对我有用的信息,以防对其他人有所帮助:我使用了被接受答案的建议提示,将日期包装为日期,并将结束日期限制部分改为日期sqlite没有日期时间数据类型。因此,将日期存储为字符串。您还可以通过比较DateTime字符串,使用日期字符串在查询中进行筛选。对于查询日期参数,您使用YYYY-MM-DD格式,而对于存储,您使用YYYY-MM-DD hh:MM:ss。这是一个字符串比较,这种不一致的比较可能会产生意外的结果

我建议:

您可以使用sqlite中的日期来遵循一致的日期格式来比较日期字符串。 或者更好

在房间内使用,以long等格式存储日期,并将其用于比较。
建议您使用来调试问题。您可能能够或可以使用Android Studio设备文件资源管理器将数据库复制到开发系统上,并在副本上运行sqlite3。我试图用你帖子中的信息重现这个问题,但没能得到你的结果。您的items表是否足够小,您可以编辑您的帖子,以包含来自items的SELECT date的输出,以便我们可以准确地看到数据库中的日期值?@BobSnyder感谢您的快速响应。多亏了你的建议,我发现我的问题是使用错误的数据类型获取POJO的日期字段,现在我的问题只是获取总计数,我刚刚编辑了这个问题。你能发布你的表的类表示形式吗?@VivekSasidharan,当然,在查询之后添加。getter和setter是自动生成的,所以如果您需要更多信息,请告诉我。最后,它可以用日期包装日期,并将查询改回和日期
@Query("SELECT strftime('%m',date) as month, COUNT(*) as total from items 
WHERE date>= :start_date AND date< :end_date GROUP BY strftime('%m',date)")

LiveData<List<Result>> getResult(String start_date, String end_date);

public class Tuple{

    @ColumnInfo(name="month")
    private String Date; // my mistake was here, had int instead of String
....

}