2014-02-23 34 views
0

如何使用SQLiteDatabase.update/SQLiteDatabase.insert插入正確的日期值。 問題似乎是ContentValues僅將字符串作爲其對的輸入。插入/更新Android中的SQLLite表中的正確日期

有一個解決方案here

對於快速參考,這是這個問題提供瞭解決方案:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
Date date = new Date(); 
ContentValues initialValues = new ContentValues(); 
initialValues.put("date_created", dateFormat.format(date)); 
long rowId = mDb.insert(DATABASE_TABLE, null, initialValues); 

與此解決方案,它亙古不變的插入適當的「日期」值成難題Date列,但將DAte作爲文本插入。 我知道這是因爲當我檢索數據(選擇)並對其執行日期操作時,它不工作。

(準確地說,datetime(DATE_COLUMN,'localtime')返回空值)

有人可以幫助我與我的問題?我已經浪費了時間:(像其他DBMS看到

回答

2

SQLite不支持Date類型,而是日期的存儲無論是作爲一個衆所周知的格式文本或數字使用Unix紀元。

的datetime函數讀取不同格式的文本,包括YYYY-MM-DD HH:MM:SS,並將它們作爲文本以YYYY-MM-DD HH:MM:SS的格式返回,因此在您的情況下,datetime將以相同格式返回已存儲在數據庫中的內容,但會將時區更改爲本地時間(假設它處於utc之前)。

Android將使結果爲datetime可通過Cursor.getString獲得。您可以使用DateFormat.parse獲取Date對象。

下或多或少會工作(不知道你的數據庫模式):

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
[...] 
Cursor cursor = mDb.query(DATABASE_TABLE, new String[]{"datetime("+DATE_COLUMN+",'localtime')"}, null, null, null. null, null); 
cursor.moveToNext(); 
Date parsed = dateFormat.parse(cursor.getString(0)); 

參考:https://sqlite.org/lang_datefunc.html

+0

非常感謝您的答覆..中號太exausted現在累了(它的凌晨3點這裏)會在一些睡眠後再試一次並發表回覆。謝謝 – Arnab

+1

我同意喇嘛。 我在應用程序中存儲日期的方式是存儲date.toString()的字符串。根據Android Developers,它的商店格式爲「EEE MMM dd HH:mm:ss zzz yyyy」。 它包括時區。 – alexk