如何从 Sqlite ( android ) 中的 datetime 字段获取日期
Posted
技术标签:
【中文标题】如何从 Sqlite ( android ) 中的 datetime 字段获取日期【英文标题】:How get date from datetime field in Sqlite ( android ) 【发布时间】:2014-07-02 05:20:36 【问题描述】:在我的应用程序中,我将(任务的)创建日期和时间作为日期时间字段存储在数据库中。
在其中一项活动中,我试图显示创建的所有任务列表,并且 我需要创建日期(只是日期而不是日期时间)作为我的第一列。
我使用了一个列表视图和简单的光标适配器来填充列表视图。
private String [] from = "CREATION_DATE" , "_id" , DataBaseHandler.DESCRIPTION ;
private int[] to =R.id.fh_list_entryDate ,R.id.fh_list_credits, R.id.fh_desc ;
//date string will be in yyyy/mm/dd format.
fh_cursor= dbHandler.getAllHistory(bun.getString("st_date"),bun.getString("end_date"));
dataAdapter = new SimpleCursorAdapter(this,R.layout.full_history_list,fh_cursor,from,to,0);
listView.setAdapter(dataAdapter);
“fh_list_entryDate”的 xml
<EditText
android:id="@+id/fh_list_entryDate"
android:layout_
android:layout_
android:layout_marginStart="4dp"
android:inputType="date"
android:focusable="false"
android:gravity="center"
android:textAppearance="?android:attr/textAppearanceMedium" />
在 getAllHistory 方法中,查询如下所示:
String historyQuery = "SELECT CREATION_DATE , CREDITS _id , DESCRIPTION FROM "+
ACTIVITY_DETAILS_TABLE_NAME +
" WHERE START_DT > ? "+" AND END_DT < ? ";
fh_cursor = sqlDB.rawQuery(historyQuery, new String[] st_date,end_date);
如果我使用上面的代码,我会在第一列中看到“Tue Jul 01 23:21:05 GMT-04:00 2014”。
我阅读了“strftime”并将查询修改为:
String historyQuery = "SELECT strftime('%Y-%m-%d', CREATION_DATE) CREATION_DATE,
CREDITS _id , DESCRIPTION FROM "+
ACTIVITY_DETAILS_TABLE_NAME +
" WHERE START_DT > ? "+" AND END_DT < ? ";
然后我得到 null 而不是 date。
我的要求是只显示日期部分。最好采用 yyyy/mm/dd 格式。或 yyyy-mm-dd 格式。
我猜一个选项是我们可以迭代 fh_cursor 并使用 java 代码中的 SimpleDateFormat 将日期时间转换为所需格式,而不是使用 SimpleCursorAdapter。 我不想那样做。有没有办法让我只修改查询?
【问题讨论】:
阅读documentation。 【参考方案1】:尝试在 WHERE 子句中使用 strftime,如下所示:
String historyQuery = "SELECT strftime('%Y-%m-%d', CREATION_DATE) CREATION_DATE,
CREDITS _id , DESCRIPTION FROM "+
" ACTIVITY_DETAILS_TABLE_NAME "+
" WHERE strftime('%Y-%m-%d',START_DT) > ? "+
" AND strftime('%Y-%m-%d',END_DT) < ? ";
【讨论】:
我尝试使用上述查询.. 现在 fh_cursor 为空。我什至尝试将字符串的日期格式更改为 yyyy-mm-dd 仍然为空。【参考方案2】:您应该注意,sqlite 中没有任何 DATETIME 数据类型。而不是使用 NUMERIC 数据类型来存储日期。在将日期插入表格之前,使用 SimpleDateFormat 将该日期转换为 longmillis。
long date = SimpleDateFormat("yyyy-MM-dd").parse("your-date-text").getTime();
现在当从表中获取日期时,遍历游标 并得到 datelongmillis 一样长
long datemillis = cursor.getLong(cursor.getColumnIndex("date_column_name"));
现在是时候以您的格式显示日期了,再次使用 SimplaDateFormat。
String dateString = SimpleDateFormat("yyyy-MM-dd").format(new Date(datemillis));
【讨论】:
感谢您的回复。是的,SQLITE 没有 Datetime 数据类型。而不是使用 simpleCursorAdapter.. 我写了一个扩展 cursorAdapter 的新类。在覆盖 bindView 方法时,我更改了日期格式。使用 simpleDateFormat。以上是关于如何从 Sqlite ( android ) 中的 datetime 字段获取日期的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Sqlite ( android ) 中的 datetime 字段获取日期
如何使用游标从sqlite android中的多个列中获取数据
如何从android studio中的recycler视图将数据添加到SQLite数据库中