我有一个要求,其中必须将具有日期时间信息的列与当前日期和时间进行比较。如果更早,则必须删除此特定记录。 我已经完成了下面的实现,但是没有收到任何错误,也没有达到预期的行为。
SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy HH:mm", Locale.getDefault());
Calendar nowCalendar = Calendar.getInstance();
String strNowTime = dateFormat.format(nowCalendar.getTime());
// Delete the records at Manager_Dashboard SQLiteDB
String whereClause = "DATETIME(End_Time) < DATETIME(?)";
String whereArgs[] = {strNowTime};
dbOfflineRange.delete("Offline_Range",whereClause,whereArgs);
您可能会注意到,如果我在SQLite表中的文本中有一个End_Time记录(如30 Nov 2018 21:35
),则应将其与当前日期时间(如30 Nov 2018 23:35
)进行比较
由于End_Time早于Now,我希望将其删除。但是它没有发生。
答案 0 :(得分:0)
日期和时间SQL函数要求日期采用可识别的格式。
时间字符串时间字符串可以采用以下任何格式:
YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS now DDDDDDDDDD
您最好(最简单)的选择是将它们存储为YYYY-MM-DD HH:MM(即,相应地更改SimpleDateFormat)。
请注意,您甚至不需要datetime函数,因为直接比较这些值将获得所需的结果。
存储unix时间戳值将是更有效的存储/处理时间。
然后您可以使用strftime函数以所需的格式返回日期。
否则,您可以使用诸如substr之类的SQL函数将存储值转换为可识别的格式,然后进行比较。 SQL As Understood By SQLite - Core Functions
这是如何处理以DD MMM YYYY HH:MM格式存储的数据的示例 假设要比较的值以YYYYMMDDHH:MM格式提供:-
DROP TABLE IF EXISTS Offline_Range;
CREATE TABLE IF NOT EXISTS Offline_Range (end_time);
-- Add some test data dd MMM yyyy HH:mm
INSERT INTO Offline_Range VALUES
('21 May 2018 10:30'),
('21 Jun 2018 10:30'),
('21 Jul 2018 10:30'),
('21 Aug 2018 10:30')
;
SELECT * FROM Offline_Range
WHERE
substr(end_time,8,4)||
CASE
WHEN instr(end_time,'Jan') THEN '01'
WHEN instr(end_time,'Feb') THEN '02'
WHEN instr(end_time,'Mar') THEN '03'
WHEN instr(end_time,'Apr') THEN '04'
WHEN instr(end_time,'May') THEN '05'
WHEN instr(end_time,'Jun') THEN '06'
WHEN instr(end_time,'Jul') THEN '07'
WHEN instr(end_time,'Aug') THEN '08'
WHEN instr(end_time,'Sep') THEN '09'
WHEN instr(end_time,'Oct') THEN '10'
WHEN instr(end_time,'Nov') THEN '11'
WHEN instr(end_time,'Dec') THEN '12'
END
||
substr(end_time,1,2)||substr(14,5)
<
'2018062200:00' -- 22 Jun 2018 00:00 amended to suit i.e. the value input
这将创建一个表:-
查询的结果将是:-