如何使用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')
返回空值)
有人可以帮我解决问题吗?我已经浪费了几个小时:(
答案 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));