1 回答
TA贡献1829条经验 获得超6个赞
我相信您可以更改fetchAllEvents方法以返回一个游标,其中包含根据需要格式化的日期,作为附加列(因此您不需要转换/格式化任何您想要的值直接提供)。
这可能基于使用strftime('%d'," + COL_DATE + " / 1000,'unixepoch')
. 这 :-
获取 COL_DATE 中的值并将其除以 1000 以降低毫秒数,
将值修改为 unix 时间,而不是儒略日。
使用%d格式化程序格式化值 DD 格式。
您的fecthAllEvents方法可能类似于:-
public Cursor fetchAllEvents() {
SQLiteDatabase db = this.getWritableDatabase();
String[] columns = new String[]{"*","strftime('%d'," + COL_DATE + " / 1000,'unixepoch') AS date_as_DD"}; //<<<<<<<<<< this gets the day of the month DD from the timestamp
return db.query(TABLE_NAME,columns,null,null,null,null,null);
}
然后,适配器可以将列date_as_DD作为字符串从 Cursor 中检索。
注意上面的代码是原理代码。它没有经过语法检查或运行,因此可能包含一些错误。
请注意,如果您想要 10 天以内的单个数字,则可以修改上面的内容以使用
CAST(strftime('%d',date/1000,'unixepoch') AS INTEGER) AS date_as_DD
(即强制使用 INTEGER 类型而不是 TEXT 类型)。
测试
以上内容基于以下测试代码:-
DROP TABLE IF EXISTS mytable;
CREATE TABLE IF NOT EXISTS mytable (_id INTEGER PRIMARY KEY, date INTEGER, content TEXT, important INTEGER);
-- add some data with unix dates with milliseconds (i.e. * 1000)
INSERT INTO mytable (date,content,important) VALUES(strftime('%s','now') * 1000,'blah',0);
INSERT INTO mytable (date,content,important) VALUES(strftime('%s','now','-1 Day') * 1000,'blah',0);
INSERT INTO mytable (date,content,important) VALUES(strftime('%s','now','-7 Day') * 1000,'blah',0);
INSERT INTO mytable (date,content,important) VALUES(strftime('%s','now','-10 Day') * 1000,'blah',0);
INSERT INTO mytable (date,content,important) VALUES(strftime('%s','now','-20 Day') * 1000,'blah',0);
INSERT INTO mytable (date,content,important) VALUES(strftime('%s','now','-1 Month') * 1000,'blah',0);
SELECT *, datetime(date/1000,'unixepoch') AS fulldate, strftime('%d',date/1000,'unixepoch') AS date_as_DD FROM mytable;
结果是:-
fulldate列显示完整的日期和时间(不需要)
date_as_DD是可用的新列。
您可能希望为列名创建一个常量,例如
DERIVED_COL_DATEASDD = "date_as_DD";
要在整个过程中使用。
例如
String[] from = new String[] {EventsDbAdapter.COL_DATE, EventsDbAdapter.COL_CONTENT};
可以更改为:-
String[] from = new String[] {"date_as_DD", EventsDbAdapter.COL_CONTENT};
或者,如果使用常量DERIVED_COL_DATEASDD ,则:-
String[] from = new String[] {EventsDbAdapter.DERIVED_COL_DATEASDD, EventsDbAdapter.COL_CONTENT};
添加回答
举报