2013-01-10 58 views

回答

13

SQLite使用ISO8601日期/時間格式存儲一個字符串,表示UTC(GMT)中的當前時間。這種格式(YYYY-MM-DD HH:MM:SS)適合於日期/時間比較。

使用以下代碼檢索日期。

Cursor row = databaseHelper.query(true, TABLE_NAME, new String[] { 
COLUMN_INDEX}, ID_COLUMN_INDEX + "=" + rowId, 
null, null, null, null, null); 
String dateTime = row.getString(row.getColumnIndexOrThrow(COLUMN_INDEX)); 

此,返回一個字符串,分析它,並重新格式化您的本地格式和時區:

DateFormat iso8601Format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
try { 
date = iso8601Format.parse(dateTime); 
} catch (ParseException e) { 
Log.e(TAG, "Parsing ISO8601 datetime failed", e); 
} 

long when = date.getTime(); 
int flags = 0; 
flags |= android.text.format.DateUtils.FORMAT_SHOW_TIME; 
flags |= android.text.format.DateUtils.FORMAT_SHOW_DATE; 
flags |= android.text.format.DateUtils.FORMAT_ABBREV_MONTH; 
flags |= android.text.format.DateUtils.FORMAT_SHOW_YEAR; 

String finalDateTime = android.text.format.DateUtils.formatDateTime(context, 
when + TimeZone.getDefault().getOffset(when), flags); 

希望這會幫助你。

+0

hi Nagaraj436我使用數據類型日期列日期。所以我不能使用cursor.getString –

+0

@DeepakKataria你有沒有嘗試過使用getString()?你有沒有使用它的錯誤? – TNR

+0

使用數據類型的日期作爲字符串,這將有助於u.i做同樣的事情。正如@ Nagaraj436所說,這有助於解析他提到的形式中的日期以及其他形式。使用cursor.getString()。toString() – sankettt

4

此代碼的工作

String s= cursor.getString(position); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    Date d=new Date(); 
    try { 
     d= dateFormat.parse(s); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    YourObject.setDate(d); 
+0

完美代碼,但需要修改才能根據自己的需求進行設置.Ex:添加** textView **的日期。 ** textview.setText(dateformate.formate(d))** –

13

SQLite不真的有DATE類型(DATE關鍵字只是意味着該列具有NUMERIC親和力,每Datatypes In SQLite Version 3),所以它是由你來選擇如何約定你會存儲日期。常見的約定是(a)使用實數來存儲Julian日期或(b)使用整數來存儲Unix紀元(1970年以來的秒數,SQLite日期和時間函數使用'unixepoch'參數支持每Date And Time Functions)。

如果你正在做存儲日期爲Unix紀元(方便的Android因爲Date對象上調用.getTime()的毫秒數從1970年開始),然後讀取的SQLite DATE字段作爲long並通過毫秒相當於該進入java.util.Date構造函數Date(long milliseconds)。所以,它看起來像這樣:

SQLiteManager dbManager = new SQLiteManager(context, DB_NAME, null, VERSION); 
SQLiteDatabase db = dbManager.getReadableDatabase(); 
Cursor cursor = db.query(TABLE_NAME, 
    new String[] { COLUMN_NAME_ID, COLUMN_NAME_DATE }, 
    null, null, // selection, selectionArgs 
    null, null, null, null); // groupBy, having, orderBy, limit 
try { 
    while(cursor.moveNext()) { 
     int id = cursor.getInt(0); 
     // Read the SQLite DATE as a long and construct a Java Date with it. 
     Date date = new Date(cursor.getLong(1)*1000); 
     // ... 
    } 
} finally { 
    cursor.close(); 
    db.close(); 
} 
+1

這是我在SQLite和Android中使用日期的首選方式。 – Flash

+0

不錯,但我有點困惑..在這種情況下SQLite的字段類型應該是DATETIME或INT或DATE? –

相關問題