2013-10-08 44 views
1

在我的Android應用程序,我用STRFTIME功能,通過比較不同的日期字符串擺脫SQLite的數據。當前日期時間是錯誤的使用STRFTIME

我設置促銷StartDateEndDate2013-10-072013-12-31分別。當前日期時間介於StartDateEndDate之間時存在促銷。

以下是有效的strftime()替換的完整列表:

%d  day of month: 00 
%f  fractional seconds: SS.SSS 
%H  hour: 00-24 
%j  day of year: 001-366 
%J  Julian day number 
%m  month: 01-12 
%M  minute: 00-59 
%s  seconds since 1970-01-01 
%S  seconds: 00-59 
%w  day of week 0-6 with Sunday==0 
%W  week of year: 00-53 
%Y  year: 0000-9999= 

,而且我用下面的查詢檢索數據。

Select * From Sal_Promotion p, Sal_Promotion_CustomerTypeAndProduct pd 
Where p.Sal_PromotionID = d.Sal_PromotionID and 
strftime('%s','now') >= strftime('%s',Sal_StartDate) and 
strftime('%s','now') = strftime('%s',Sal_EndDate) and 
Sal_CustomerTypeID = customerTypeID and 
p.Sal_PromotionID = promoID; 

當我在2013年10月7日早上7點測試我的應用程序時,我得到以下輸出。

輸出:

開始日期:2013年10月7日00:00:00(值:1381104000)

結束日期:2013-12-31 00:00:00(值: 1388448000)

CurrentDateTime:2013年10月7日7時00分○○秒(值:1381100400)

CurrentDateTime值應該是起始日期和結束日期之間。但爲什麼價值是錯誤的?當前日期時間比StartDate晚3600秒(1小時)。

我現在的城市是新加坡(GMT + 8:00)。是因爲時區差異嗎?

有人能指出我出了什麼問題?

回答

1

的時區偏移是你的問題。 SQLite3的日期和時間函數默認爲UTC。

一個解決方法就是比較日期字符串直接

date('now') >= Sal_StartDate and date('now) <= Sal_EndDate 

您也可以通過一個'localtime'選項將SQLite3的日期和時間函數。請參閱SQLite3 date and time functions documentation

+0

在上面提供的鏈接中,這用於獲取本地時區。 'SELECT datetime(1092941466,'unixepoch','localtime');'所以,我通過這種方式轉換爲當前的本地DateTime。 'SELECT datetime(strftime('%s','now'),'unixepoch','localtime')'。謝謝你的幫助。 – albert

+0

你可以用'datetime('now','localtime')簡化這個' –