使用Strftime时,当前DateTime是错误的

时间:2013-10-08 02:22:02

标签: java android sql datetime gmt

在我的Android应用程序中,我使用STRFTIME函数通过比较不同的Date字符串从SQLite获取数据。

我将促销StartDateEndDate分别设置为2013-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点测试我的申请时,我得到以下输出。

输出:

StartDate:2013-10-07 00:00:00(价值:1381104000)

EndDate:2013-12-31 00:00:00(价值:1388448000)

CurrentDateTime:2013-10-07 07:00:00(价值:1381100400)

CurrentDateTime值应介于StartDate和EndDate之间。但为什么价值是错误的?当前日期时间比StartDate晚3600秒(1小时)。

我目前的城市是新加坡(格林尼治标准时间+8:00)。是因为时区差异吗?

有人能指出我的问题是什么吗?

1 个答案:

答案 0 :(得分:1)

时区偏移是您的问题。 SQLite3日期和时间函数默认为UTC。

一种解决方案是直接比较日期字符串

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

您还可以将'localtime'选项传递给SQLite3日期和时间函数。请参阅SQLite3 date and time functions documentation