2013-01-10 16 views

Antwort

13

SQLite speichert eine Zeichenfolge, die die aktuelle Uhrzeit in UTC (GMT) darstellt, unter Verwendung des Datums/Uhrzeit-Formats ISO8601. Dieses Format (JJJJ-MM-TT HH: MM: SS) ist übrigens für Datums-/Zeitvergleiche geeignet.

Verwenden Sie den folgenden Code, um das Datum abzurufen.

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

Dies liefert einen String, analysieren sie und umformatieren zu Ihrem lokalen Format und Zeitzone:

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

Hope this Ihnen helfen.

+0

hi Nagaraj436 Ich verwende Datentyp DATE für Spaltendatum. Also kann ich nicht verwenden cursor.getString –

+0

@DeepakKataria Haben Sie versucht mit der getString()? Hast du Fehler dabei? – TNR

+0

Verwenden Sie den Datentyp für Datum als Zeichenfolge, die Ihnen helfen würde, das gleiche zu tun. Wie gesagt von @ Nagaraj436, die hilft, das Datum in der Form zu analysieren, die er erwähnt und andere Formen sowie .. cursor.getString(). toString() – sankettt

4

dieser Code funktioniert

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

perfekter Code, aber müssen geändert werden, um entsprechend ihrer Anforderung einzustellen.Ex: Datum ** TextView ** hinzuzufügen. ** textview.setText (dateformate.formate (d)) ** –

13

SQLite wirklich keine DATE Typ haben (die DATE Schlüsselwort bedeutet nur die Spalte eine NUMERIC Affinität hat, pro Datatypes In SQLite Version 3), so ist es an Ihnen, eine Konvention zu wählen, wie Du wirst Daten speichern. Übliche Konventionen sind (a) die Verwendung reeller Zahlen zur Speicherung julianischer Daten oder (b) die Verwendung von ganzen Zahlen zur Speicherung einer Unix-Epoche (Sekunden seit 1970, die die SQLite-Datums- und Zeitfunktion mit dem Argument 'unixepoch' pro Date And Time Functions unterstützt).

Wenn Sie tun Speicherung Daten als Unix-Epoche (praktisch für Android seit .getTime() auf einem Date Objekt Aufruf gibt die Anzahl der Millisekunden seit 1970), dann lesen Sie das SQLite DATE Feld als long und die Millisekunden-äquivalent, dass passieren in den java.util.Date Konstruktor Date(long milliseconds). So würde es ungefähr so ​​aussehen:

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

Dies ist meine bevorzugte Art, Daten in SQLite und Android zu verwenden. – Flash

+0

Schön, aber ich bin ein wenig verwirrt .. Der Typ des Feldes in SQLite in diesem Fall sollte DATETIME oder INT oder DATE sein? –