1

SQLiteのテーブルから特定のレコードに変更を加えるたびに、lastChangedDate列でフランスからの時刻を設定する必要があります。これが私のテーブルの構造です:

CREATE TABLE name(
    id VARCHAR(36) PRIMARY KEY
    , pos_report_id VARCHAR(36)
    , path_name VARCHAR(64)
    , photo_name VARCHAR(64)
    , from_scratch INTEGER DEFAULT 0
    , lastChangedDate DATETIME DEFAULT (DATETIME('now', 'utc', '1 hours'))
)

DATETIME('now')リアルタイムの2時間前に戻りDATETIME('now', 'utc', '1 hours')、時刻の3時間前に戻ります。なぜこれが起こっているのですか?より多くの国で機能するアプリケーションが必要なため、を使用できませんlocaltime

これを解決する方法はありますか?

4

2 に答える 2

2

DATETIME('now', 'utc', '1 hours') の代わりに datetime('now','localtime') を試してください OK lastChangedDate にデフォルトの時間を使用しないでください

CREATE TABLE name(
    id VARCHAR(36) PRIMARY KEY
    , pos_report_id VARCHAR(36)
    , path_name VARCHAR(64)
    , photo_name VARCHAR(64)
    , from_scratch INTEGER DEFAULT 0
    , lastChangedDate DATETIME)
)

次に、レコードをテーブルに追加する場合は、フランスで時間を計算し、この値をデータベースに追加できます

//Calendar cal = Calendar.getInstance();
//Log.v("hata",String.valueOf(cal.get(Calendar.HOUR)));

Calendar c = Calendar.getInstance();

// It is local time
Log.v("time",String.valueOf(c.getTime()));

TimeZone z = c.getTimeZone();       
int offset = z.getRawOffset();

if(z.inDaylightTime(new Date())){
    offset = offset + z.getDSTSavings();
}

// france is GMT2 
int offsetHrs = offset / 1000 / 60 / 60;
int offsetMins = offset / 1000 / 60 % 60;

// Offsets
Log.v("time",String.valueOf(offsetHrs));
Log.v("time",String.valueOf(offsetMins));

c.add(Calendar.HOUR_OF_DAY, (-offsetHrs));
c.add(Calendar.MINUTE, (-offsetMins));

// FRANCE time
Log.v("time",String.valueOf(c.getTime()));
于 2012-12-07T10:08:45.697 に答える