2012-12-07 20 views
0

我需要每次在SQLite表中對某個記錄進行更改時,在lastChangedDate列中設置來自法國的時間。這裏是我的表的結構:爲什麼datetime('now')在SQLite中實時返回前2小時?

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

任何想法如何解決這個問題?

回答

2

嘗試的日期時間( '現在', '本地時間'),而不是DATETIME( '現在', 'UTC','1小時) 好不要使用默認時間爲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())); 
+0

我寫道,我需要的應用程序在許多國家的工作。如果我在非洲,我的時間是凌晨4點,法國可以是7點。我需要知道來自任何國家的法國是哪個小時。 – Gabrielle

+0

好吧,我編輯了我的答案,我希望它可以幫助 – Talha

+0

datetime('now','localtime')適用於我的情況,謝謝:) –

3

我有同樣的問題(使用Raspbarry皮sqlite的)。 'utc'顯然只根據位置和時區來計算差異。我知道它是這樣運行的:

select datetime(datetime('now', 'localtime'), 'utc'); 

另外查看我的VIEW [NOW]用於傳感器日誌記錄目的的其他變體。

CREATE VIEW [NOW] AS 
SELECT datetime('now', 'localtime') as LOCAL, 
datetime(datetime('now', 'localtime'),'utc') as UTC, 
substr(datetime('now', 'localtime'),1,17)||'00' as TimeSlot_1min, 
substr(datetime('now', 'localtime'),1,15)||'0:00' as TimeSlot_10min, 
substr(datetime('now', 'localtime'),1,14)||'00:00' as TimeSlot_1h; 
相關問題