1

我尝试从 Java 将日期时间插入到 sqlite 数据库中,但事情很奇怪。

当我使用代码Calendar.getInstance().getTime()插入时,表中的值为(例如)1359960520718。当我使用字符串2010-01-01插入表时,该值是正常的:2010-01-01。

但是当我使用字符串2010-21-51插入表格时,表格中的值为2010-21-51。那是一个无效的日期。它出什么问题了?

4

2 回答 2

8

这是因为 SQLite 是动态类型的。您可以将任何类型的值写入任何列,它不会抱怨 - 它可能会默默地将其存储在不同的类型中。

根据文档,日期时间可以存储为

  • TEXT 作为 ISO8601 字符串(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • REAL 作为儒略日数字,根据预测的公历,自公元前 4714 年 11 月 24 日格林威治中午以来的天数。
  • INTEGER 作为 Unix 时间,自 1970-01-01 00:00:00 UTC 以来的秒数。

在您的情况下,SQLite 无法将无效日期转换为 INTEGER 格式,而是被迫将其存储为标准字符串。此日期无效,但 SQLite 不在乎。

于 2013-02-04T07:12:17.480 回答
1

您可以使用 Calendar.getInstance().getTime() 中的参数新建 Date 类型的日期,例如:

Date date = new Date(Calendar.getInstance().getTime()); 

然后,也许您应该使用 SimpleDateFormate 将日期格式化为您需要的字符串,例如:

DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String timeStr = df.format(date);

然后,您将 timeStr 插入表中...如果您在数据库的插入语句中执行某些操作,您还有其他方法

于 2013-02-04T07:13:25.503 回答