2010-05-26 73 views
2

我知道SQLite将日期存储为长整数。当我使用标准的方法(使用数据读入一个游标的查询()方法即)读取的行,其结果是,其包括的时间的日期字符串:日期类型和Android数据库

2010-05-25 19:52:04 

如果我想要不同的格式,我必须将字符串解析回日期 - 可能,但稍微向后。

通过使用ViewBinder(如this question中所建议的),我可以做任何我想做的事情,但日期在重写的方法执行时已经是一个字符串了。

对上述问题的接受答案还表明,将日期存储为多个将有助于避免此问题。我不想那么做,以防万一我想用我的数据解释我的数据而不是这个应用程序。也许我想通过提供商公开它。

更糟糕的是,通过

android.text.format.DateFormat.getDateFormat(getApplicationContext()) 

获得DateFormat实例无法解析由光标返回这样的日期字符串。实际上没有可以做到的静态方法 - 这是一种单向转换,显然是一种疏漏。

有没有办法在数据库适配器中处理这个问题,即控制光标所包含的日期格式,以便我不必更改模式,也不必分析默认输出成日期类型?

到目前为止的答案表明我应该在数据库中执行输出格式。我不想因为多种原因这样做,最主要的是因为我不能以这种方式基于用户的语言环境格式化日期(不容易,那是)。

回答

1

的SQLite有许多内置date and time functions.

+0

我使用android.database.sqlite.SQLiteD atabase.query(),它需要一个列名称列表。你是说我必须手动编码查询吗? – cdonner 2010-05-26 03:12:25

+0

@cdonner,是的,使用android.database.sqlite.SQLiteDatabase.rawQuery()。 – 2010-05-26 13:37:51

+0

@cdonner,或者(我无法测试它,因为我手边没有Android平台)我不知道给android.database.sqlite.SQLiteDatabase.query()一个列名“strftime('%Y - %m-%d',date_colname)“会做什么? – 2010-05-26 14:46:53

0

无需获得日期列字符串,你应该能够使用getLong(..)并创建一个合适的对象Date像这样:

Date created = new Date(cursor.getLong(createdDateIndex)); 
相关问题