2014-07-02 33 views
2

在我的應用程序中,我將創建日期和時間(任務)作爲日期時間字段存儲在數據庫中。如何在Sqlite(android)中從datetime字段獲取日期

在其中一個活動中,我試圖顯示創建的所有任務列表,並且我需要創建日期(只是日期而不是日期時間)作爲我的第一列。

我已經使用了listview和簡單的光標adapater來填充列表視圖。

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); 

在getAllHistory方法查詢看起來像XML的 「fh_list_entryDate」

<EditText 
     android:id="@+id/fh_list_entryDate" 
     android:layout_width="120dp" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="4dp" 
     android:inputType="date" 
     android:focusable="false" 
     android:gravity="center" 
     android:textAppearance="?android:attr/textAppearanceMedium" /> 

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}); 

如果我使用上面的代碼我得到「週二7月1 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 < ? "; 

然後我得到的空代替日期。

我的要求是隻顯示日期部分。最好採用yyyy/mm/dd格式。或者yyyy-mm-dd格式。

我想一個選擇是使用SimpleCursorAdapter,而不是使用SimpleCursorAdapter,我們可以遍歷fh_cursor並在java代碼中使用SimpleDateFormat將日期時間轉換爲desrired格式。 我不想那樣做。有沒有一種方法可以讓我修改查詢?

+1

閱讀[documentation](http://www.sqlite.org/datatype3.html#datetime)。 –

回答

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) < ? "; 
+0

我嘗試使用上述查詢..現在fh_cursor爲空。 我甚至嘗試將字符串的日期格式更改爲yyyy-mm-dd,但它仍然爲空。 – Maheedhar

0

你應該注意到,沒有在任何源碼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)); 
+0

感謝您的回覆.. 是的SQLITE沒有Datetime數據類型。 而不是使用simpleCursorAdapter ..我worte一個新的類擴展cursorAdapter。在重寫bindView方法時,我更改了日期格式。使用simpleDateFormat。 – Maheedhar