在Android上的SQL数据库中存储日期和时间

时间:2011-03-18 16:13:30

标签: android sql datetime

我正在尝试在我在Android设备上创建的数据库中存储3个值。值为NAME,DATE和TIME。因此我的问题是:当它们插入数据库时​​,获取和存储当前DATE和TIME值的最佳方法是什么?

到目前为止,我已经确定了两种方法,可以通过在//values.put(TIME, System.currentTimeMillis());之类的android中进行系统调用,也可以使用像GETDATE()这样的SQL函数。但是,哪个更好?

如果我朝错误的方向前进,请告诉我并指引我走向正确的方向。

2 个答案:

答案 0 :(得分:2)

使用SQL函数将与使用相同SQL引擎的其他工具更兼容。

使用ISO格式YYYY-MM-DD hh:mm:ss.fff的文字将广泛兼容,并且仍然可以正确排序。

答案 1 :(得分:2)

sqlite docs为这些列类型提供了存储日期的选项:

  • TEXT as ISO8601字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • 真实的朱利安日数,即公元前4714年11月24日格林威治中午以来的天数。根据预感格里高利历。
  • INTEGER as Unix Time,自1970-01-01 00:00:00 UTC以来的秒数。

您可以使用Doug Currie所描述的TEXT,或者您可以使用java.util.Date使用INTEGER。 (我不知道你为什么要使用REAL选项。)

要使用INTEGER,您可以加载和存储类似这样的日期:

// build a date from a Cursor
Date d = new Date(cursor.getLong(DATE_FIELD_INDEX));

// add a date to an SQLiteDatabase
final ContentValues values = new ContentValues();
values.put(DATE_FIELD, d.getTime());
db.insert(TABLE_NAME, null, values);

这在数据库中的可读性较差,但日期(在您的查询中)之间的比较应该更快,因为比较数字比字符串更快。 (虽然我对sqlite的实现知之甚少。)