SQLite-net-pcl 比较日期

SQLite-net-pcl Comparing Dates

如问题中所述,我正在尝试对在特定日期范围内完成的任务进行日期比较。

我的模型有一个名为“Done”的布尔值和一个名为“DatesCompleted”的存储完成日期的字符串

我目前有一个查询显示所有已完成的项目限制为 25,并且工作正常:

return db.QueryAsync<Tasks>("SELECT * FROM [Tasks] WHERE [Done] = 1 LIMIT 25");

如何只获取今天之前 7 天的完成日期?这是一种 sudo 代码,我希望如何获得解决方案,但我不知道如何在 SQLite-net-pcl,

中写出来
return db.QueryAsync<Tasks>("SELECT * FROM [Tasks] WHERE [Done] = 1 AND [DatesCompleted] >= (DateTime.Now - new TimeSpan(7,0,0,0))` LIMIT 25");

编辑: 在尝试了第一个解决方案后,我没有运气,所有项目似乎都出现了,无论完成时间如何。我试过这个:

 foreach(var ii in TaskListDoneSource)
                {
                    System.Diagnostics.Debug.WriteLine(ii.Name + " completed on : " + ii.DateCompleted + "  compared against " + (DateTime.Now-new TimeSpan(7,0,0,0)).ToString());
                    if (ii.DateCompleted > (DateTime.Now - new TimeSpan(7, 0, 0, 0)))
                        System.Diagnostics.Debug.WriteLine("The date completed has not quite hit 7 days");

                }

当我在 7 天内但显然没有 IF 语句调用时,IF 语句显示它正在工作。所以这告诉我我在第一个答案中推荐的查询做错了:

SELECT * FROM [Tasks] WHERE [Done] = 1 AND [DateCompleted] >= datetime('now', '-7 day')

编辑 2:我使用提供的查询得到了它。唯一关闭的是将 DateCompleted 作为 DateTime 而不是在我的模型中正确格式化的字符串。 (https://www.sqlite.org/lang_datefunc.html)

假设在 [DatesCompleted] 中您以 ISO 格式 YYYY-MM-DD hh:mm:ss 存储时间戳,获取当前时间戳前 7 天时间戳的正确 SQLite 语法是:

datetime('now', '-7 day')

或:

datetime('now', '-7 day', 'localtime')

获取当地时间的时间戳。

所以您的查询应该是:

SELECT * 
FROM [Tasks] 
WHERE [Done] = 1 AND [DatesCompleted] >= datetime('now', '-7 day')