2017-01-11 12 views
1

私のAndroidアプリケーションには、デフォルト値としてCURRENT_TIMESTAMPという日時フィールドがあります。問題は、エミュレータの時刻と異なる値を挿入していることです。Android SQL DATETIME CURRENT_TIMESTAMP

  • デバイスの現在の日付と時刻を挿入する方法。

  • この列を使用してテーブルをソートしたり、古いレコードを削除することはできますか? 24時間。すべてのヘルプは理解されるであろう

    public void onCreate(SQLiteDatabase db) { 
        String query = "CREATE TABLE " + TABLE_BLOCKEDSMS + " (" + 
          COLUMN_BLOCKEDSMS + " TEXT," + 
          COLUMN_DATETIME + "DATETIME DEFAULT CURRENT_TIMESTAMP);"; 
        db.execSQL(query); 
    } 
    

は、ここに私のコードです。

+0

を見つけることができますが、エミュレータで特定の時間のために挿入されていた値の例を与えることができますか?あなたのエミュレータはどのタイムゾーンに設定されていますか? (つまり、あなたの問題は[this]ではありません(http://stackoverflow.com/questions/381371/sqlite-current-timestamp-is-in-gmt-not-the-timezone-of-the-machine )?) –

答えて

3

私はDATETIME DEFAULT (datetime('now','localtime'))があなたが望むことを行い、それは/ 2017-01-12 07:33:10のように保存されています。コメント文のCOLUMN_DATETIME +「DATETIMEのDEFAULT(日時( '今'、 'localtimeの')))の一部を1として

public void onCreate(SQLiteDatabase db) { 
    String query = "CREATE TABLE " + TABLE_BLOCKEDSMS + " (" + 
      COLUMN_BLOCKEDSMS + " TEXT," + 
      COLUMN_DATETIME + "DATETIME DEFAULT (datetime('now','localtime')));"; 
    db.execSQL(query); 
} 

すなわち

、次のようにが説明されています -

COLUMN_DATETIMEDATETIMEカラム(SQLiteのリジッドタイプDatatypes In SQLite Version 3を有していないことに注意)の一種で、列の名前である。DEFAULTは使用するデフォルト値を示します(オプション)。

値が明示的(0 'A'など)の場合、その値は単にDEFAULTに従います。ただし、値を式で計算する場合は、角括弧()で囲む必要があります。 SQLiteには多数の関数があり、そのうちの5つは日付と時刻関数です。これらは、日付時間日時ユリウス通日のstrftimeです。日時この例/溶液のために選択されたものの

いずれ日時又はのstrftimeは、使用することができます。だから我々はまだ... DEFAULT (datetime(<argumnets>))を持っていない。

datetimeの構文はdatetime(timestring, modifier, modifier, ...)です。タイムストリングは時間です(許可された日付を含める)。 nowは、現在の日時に基づいてタイム・タイムストリングを生成します。しかし、それはUTCです。 ローカルタイムモディファイアは、現地時間に合わせて時間を変更します(タイムスケールがUTCで、予期しない結果がの場合は、)。

さらに、より詳細な情報はこちらSQL As Understood By SQLite - Date And Time Functions

+0

ありがとう。出来た。 "datetime( 'now'、 'localtime')を説明できますか? –