SQLite保存日期12/31/69?

时间:2012-01-05 20:45:53

标签: java android sqlite

我的sqlite在android中的日期是12/31/69而不是实际日期。我在我的数据库适配器中有这个:

    + KEY_DATE + " DATETIME DEFAULT CURRENT_TIMESTAMP

在我的活动中我有

        Date date = new Date(cursor.getLong(cursor.getColumnIndex(mDbHelper.KEY_DATE)));
        mDateFormat = DateFormat.getDateInstance(DateFormat.SHORT);

当我执行Log.d(“Debug”,mDateFormat.format(date))时,它输出12/31/69我做错了什么?

2 个答案:

答案 0 :(得分:2)

mDateFormat只是一种日期格式 - 您没有使用上一行中date的值。你想要这样的东西:

Log.d("Debug", mDateFormat.format(date));

现在可能仍然会给出错误的价值 - 但我们可以继续这样做。如果您在适配器中显示的内容多于您在那里的部分语句,那将会非常有用。我们没有足够的背景。

编辑:你正在调用getLong,但你有一个默认值CURRENT_TIMESTAMP,它看起来像 text

  

如果列的默认值为CURRENT_TIME,CURRENT_DATE或CURRENT_TIMESTAMP,则新行中使用的值是当前UTC日期和/或时间的文本表示。对于CURRENT_TIME,值的格式为“HH:MM:SS”。对于CURRENT_DATE,“YYYY-MM-DD”。 CURRENT_TIMESTAMP的格式为“YYYY-MM-DD HH:MM:SS”。

我不清楚当你把这个值拿得很长时你会发生什么...根据文档,结果是特定于实现的 - 我怀疑它返回0,给你一个Unix纪元的日期,如果你在格林威治以西的时区,你的输出会有意义。

答案 1 :(得分:0)

疯狂猜测:

  1. 您所在的时区是GMT减去某事(编辑:已确认);
  2. 你返回的时间是几秒钟,这意味着你必须乘以1000。
  3. Date构造函数从纪元开始需要多少毫秒,而不是秒。

    尝试将第一行替换为:

    Date date = new Date(cursor.getLong(cursor.getColumnIndex(mDbHelper.KEY_DATE)) * 1000);