2013-01-10 4 views

Répondre

13

SQLite stocke une chaîne représentant l'heure actuelle en UTC (GMT), en utilisant le format de date/heure ISO8601. Ce format (AAAA-MM-JJ HH: MM: SS) est par ailleurs approprié pour les comparaisons de date/heure. Utilisez le code ci-dessous pour récupérer la date.

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

Ce, retourne une chaîne, analyser et reformater votre format local et le fuseau horaire:

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

Espérons que cela vous aidera.

+0

hi Nagaraj436 J'utilise le type de données DATE pour la date de la colonne. Donc, je ne peux pas utiliser cursor.getString –

+0

@DeepakKataria Avez-vous essayé d'utiliser getString()? avez-vous eu des erreurs en utilisant cela? – TNR

+0

Utilisez le type de données pour la date comme chaîne qui m'aiderait à faire de même. comme dit par @ Nagaraj436 qui aide à l'analyse de la date dans la forme qu'il a mentionné et d'autres formes aussi bien. faire usage de cursor.getString(). toString() – sankettt

4

ce code fonctionne

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

code parfait, mais besoin de modifier pour définir pour afficher en fonction de leur exigence.Ex: date à ajouter ** textView **. ** textview.setText (dateformate.formate (d)) ** –

13

SQLite n'a pas vraiment un type DATE (le mot-clé DATE signifie simplement la colonne a une affinité NUMERIC, par Datatypes In SQLite Version 3), il est donc à vous de choisir une convention pour savoir comment vous allez stocker des dates. Les conventions communes sont (a) utiliser des nombres réels pour stocker des dates juliennes ou (b) utiliser des nombres entiers pour stocker une époque Unix (secondes depuis 1970, que la fonction date et heure de SQLite supporte avec l'argument 'unixepoch' par Date And Time Functions).

Si vous faites les dates de stockage comme époque Unix (pratique pour Android depuis appelant .getTime() sur un objet Date retourne le nombre de millisecondes depuis 1970), puis lire le champ SQLite DATE comme long et passer l'équivalent milliseconde de cette dans le constructeur java.util.DateDate(long milliseconds). Donc, cela ressemblerait à ceci:

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

C'est ma façon préférée d'utiliser Dates dans SQLite et Android. – Flash

+0

Nice mais je suis un peu confus .. Le type de champ sur SQLite dans ce cas devrait être DATETIME ou INT ou DATE? –

Questions connexes