23

我有sqlite database

    private static final String DB_PROCESS_CREATE = "create table "
        + DB_TABLE_PROCESS + "(" + PROCESS_ID
        + " integer primary key autoincrement, "
        + PROCESS_DATE + " date);";

我创造它db.execSQL(DB_PROCESS_CREATE);

如何在此数据库中添加日期值?我试过 :

String date = new SimpleDateFormat("yyyy.MM.dd").format(Calendar
.getInstance().getTime());
ContentValues cv = new ContentValues();
cv.put(db.PROCESS_DATE,Date.valueOf(date));
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv));

但后来我得到error

"The method put(String, String) in the type ContentValues is not applicable for the arguments (String, Date)".
4

3 回答 3

50

现在,当您想将日期插入数据库时​​,可以使用此代码。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String date = sdf.format(new Date());

在数据库中插入字符串“日期”

sqlite 中的日期格式应为以下格式:

YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD 

有关更多详细信息,请查看:http ://www.sqlite.org/lang_datefunc.html

于 2013-05-24T16:56:24.490 回答
13

您不能直接在 SQLite 中存储日期。例如,您可以将其存储为整数值:

ContentValues cv = new ContentValues();
cv.put(db.PROCESS_DATE, new Date().getTime());
db.mDB.insert(db.DB_TABLE_PROCESS, null, cv));

在这种情况下,您的日期字段必须声明为整数:

private static final String DB_PROCESS_CREATE = "create table "
        + DB_TABLE_PROCESS + "(" + PROCESS_ID
        + " integer primary key autoincrement, "
        + PROCESS_DATE + " integer);";

来自 SQLite 文档:SQLite 没有专门用于存储日期和/或时间的存储类。相反,SQLite 的内置日期和时间函数能够将日期和时间存储为 TEXT、REAL 或 INTEGER 值:

  1. TEXT作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  2. REAL作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
  3. INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。应用程序可以选择以任何这些格式存储日期和时间,并使用内置的日期和时间函数在格式之间自由转换。

http://www.sqlite.org/datatype3.html

于 2013-05-24T19:05:52.273 回答
2

将日期放入数据库的最佳方法是使用它的 long 值。我试图做你正在做的事情,它有一个类似的错误。代替字符串,输入一个数值。它可以取长值,我相信这是某种毫秒值。然后,当您将其拉出时,它可以重新转换。

于 2013-05-24T16:45:46.310 回答