2013-01-10 20 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

こんにちはNagaraj436私は列の日付にデータ型DATEを使用しています。だから私は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

という完璧なコードですが、要件に応じて表示するように変更する必要があります。例:** textView **を追加する日付。 ** textview.setText(dateformate.formate(d))** –

13

の作品SQLiteは本当に(DATEキーワードはちょうどDatatypes In SQLite Version 3ごとに、カラムはNUMERIC親和性を有することを意味する)DATEタイプを持っていないので、どのようにするための規約を選択するのはあなた次第ですあなたは日付を保存します。一般的な規則は、(a)ユリウスの日付を格納するために実数を使用するか、(b)Unixエポックを格納するために整数値を使用する(1970年以降、SQLiteの日時関数が 'unixepoch'引数でDate And Time Functionsに対応する)。あなたはUnixエポックとして保存日数をやっている場合は

、その後、longとしてSQLiteのDATEフィールドを読み、そのミリ秒相当を渡す(Dateオブジェクトに.getTime()を呼び出すので、Androidのための便利では1970年以降のミリ秒数を返します) 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でなければなりませんか? –

関連する問題