在Android中的SQLite表中插入/更新正确的日期

时间:2014-02-23 20:51:48

标签: android android-sqlite

如何使用SQLiteDatabase.update/SQLiteDatabase.insert插入正确的日期值。 问题似乎是ContentValues仅将字符串作为其对的输入。

有一个解决方案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”值,而是将DAte作为文本插入。 我知道这一点,因为当我检索数据(选择)并对其进行日期操作时,它不起作用。

(确切地说,datetime(DATE_COLUMN,'localtime')返回空值)

有人可以帮我解决问题吗?我已经浪费了几个小时:(

1 个答案:

答案 0 :(得分:2)

SQLite不支持Date类型,如其他一些DBMS所示。相反,日期可以以熟知的格式存储为文本,也可以使用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