greenDAO - 日期类型,返回1 / jan / 1970

时间:2014-03-04 12:45:24

标签: android sqlite greendao

使用greenDAO生成器我使用:

entity.addDateProperty("date").notNull();

我插入了值:'2013-10-30',当我检查我的数据库时,我有值。 我使用此查询检查了此值:

select datetime(date) from myTable;

然后它返回: 2013-10-10 00:00:00

现在在android中,当我尝试检索此值时(对于每一行):

myTable.getDate();

始终返回 01/01/1970

我发现了什么(但可能不是导致此问题的原因):

  1. 我在我的代码中做了一些调试,我发现由greenDAO生成的类myTableDao.java,方法 public void readEntity(Cursor cursor,History_Job entity,int offset)从光标返回值“2013”​​:

    entity.setDate(new java.util.Date(cursor.getLong(offset + 1)));

  2. 仍然在myTableDao.java中,方法 createTable()我将此字段声明为Integer。

    ... “'DATE'INTEGER NOT NULL,”+ // 1:date ...

  3. 我是否对DATE属性做了错误,或者在尝试使用此类字段时是否为greenDAO上的错误?

2 个答案:

答案 0 :(得分:2)

GreenDao在实体中使用Java Date对象,并将其Date.getTime()(time-in-millis-since-epoch)值存储为SQLite INTEGER。如果正确使用它,这两种方式都可以正常工作。我不确定你为什么要手动插入日期 - 这会破坏使用ORM库的目的。

答案 1 :(得分:0)

GreenDao始终以该特定格式返回日期。你可以称之为bug。

您可以在此处查看代码

<强> https://github.com/greenrobot/greenDAO

你能做的是

  • 来自here
  • 来自GreenDao
  • 添加方法setDateFormat(字符串格式),并为其他人做出贡献。

请参阅 S QLite Date Datatypes here.

的文档

SQLite以三种格式 TEXT,REAL和INTEGER 存储日期,所以关于GreenDao方法的所有内容都将返回给您。你可以修改它。