2013-01-10 12 views

Odpowiedz

13

SQLite przechowuje ciąg reprezentujący aktualny czas w UTC (GMT), używając formatu daty/czasu ISO8601. Ten format (RRRR-MM-DD GG: MM: SS) jest odpowiedni do porównań daty/czasu.

Użyj poniższego kodu, aby pobrać datę.

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

To zwraca łańcuch, analizować je i sformatować do lokalnej strefy czasowej i formacie:

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

nadzieję, że to pomoże.

+0

Witam Nagaraj436 Używam typu danych DATA dla daty kolumny. Więc nie mogę użyć cursor.getString –

+0

@DeepakKataria Czy próbowałeś używać getString()? czy masz jakieś błędy z tego powodu? – TNR

+0

użyj datatape jako daty, która pomogłaby u.i zrobić to samo. jak powiedział @ Nagaraj436, który pomaga parsować datę w formie, o której wspomniał, a także w innych formach .. użyj cursor.getString(). toString() – sankettt

4

ten kod działa

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

idealny kod, ale trzeba zmodyfikować, aby ustawić wyświetlanie według ich wymagań.Ex: data, aby dodać ** textView **. ** textview.setText (dateformate.formate (d)) ** –

13

SQLite tak naprawdę nie ma typ DATE (słowo kluczowe DATE po prostu oznacza, że ​​kolumna ma NUMERIC powinowactwo, za Datatypes In SQLite Version 3), więc jest to do ciebie należy wybrać konwencję na jak będziesz przechowywać daty. Typowymi konwencjami są: (a) używanie liczb rzeczywistych do przechowywania dat juliańskich lub (b) używanie liczb całkowitych do przechowywania epoki Uniksa (sekundy od 1970 r., W których funkcja daty i czasu SQLite obsługuje argument "unixepoch" na Date And Time Functions).

Jeśli robisz termin przechowywania tak Unix epoki (wygodne dla Androida od nazywając .getTime() na Date obiektu zwraca liczbę milisekund od 1970 roku), a następnie odczytać DATE pola SQLite jako long i przekazać równowartość milisekundę że w konstruktorze java.util.DateDate(long milliseconds). Wyglądałoby to mniej więcej tak:

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

To jest mój preferowany sposób używania dat w SQLite i Androidzie. – Flash

+0

Miło, ale jestem trochę zdezorientowany. Typ pola SQLite w tym przypadku powinien być DATETIME, INT lub DATE? –

Powiązane problemy