如何在sqlite数据库中添加日期

时间:2013-05-24 16:43:09

标签: android database sqlite date

我有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)".

3 个答案:

答案 0 :(得分:45)

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

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

在数据库中插入字符串'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

答案 1 :(得分:10)

您无法直接在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 饰演Julian 日数,11月以来格林威治中午以来的天数 公元前24,4714根据公历格里高利历。
  3. INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。 应用程序可以选择在任何这些中存储日期和时间 使用内置日期格式化并在格式之间自由转换 和时间功能。
  4. 请参阅http://www.sqlite.org/datatype3.html

答案 2 :(得分:2)

将日期放入数据库的最佳方法是使用它的long值。我试着去做你正在做的事情,它也有类似的错误。而不是字符串,放入一个数值。它可以采用长值,我认为是某种毫秒值。然后可以在将其拉出时重新转换。