1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個贊
我相信您可以更改fetchAllEvents方法以返回一個游標(biāo),其中包含根據(jù)需要格式化的日期,作為附加列(因此您不需要轉(zhuǎn)換/格式化任何您想要的值直接提供)。
這可能基于使用strftime('%d'," + COL_DATE + " / 1000,'unixepoch')
.?這 :-
獲取 COL_DATE 中的值并將其除以 1000 以降低毫秒數(shù),
將值修改為 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 中檢索。
注意上面的代碼是原理代碼。它沒有經(jīng)過語法檢查或運(yùn)行,因此可能包含一些錯誤。
請注意,如果您想要 10 天以內(nèi)的單個數(shù)字,則可以修改上面的內(nèi)容以使用
CAST(strftime('%d',date/1000,'unixepoch') AS INTEGER) AS date_as_DD
(即強(qiáng)制使用 INTEGER 類型而不是 TEXT 類型)。
測試
以上內(nèi)容基于以下測試代碼:-
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;
結(jié)果是:-
fulldate列顯示完整的日期和時間(不需要)
date_as_DD是可用的新列。
您可能希望為列名創(chuàng)建一個常量,例如
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};
添加回答
舉報(bào)