当前日期时间使用 Strftime 错误

Posted

技术标签:

【中文标题】当前日期时间使用 Strftime 错误【英文标题】:Current DateTime is wrong using Strftime 【发布时间】:2013-10-14 19:19:06 【问题描述】:

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

我将 Promotion 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 点测试我的应用程序时,我得到以下输出。

输出:

开始日期:2013-10-07 00:00:00(值:1381104000)

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

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

CurrentDateTime 值应介于 StartDate 和 EndDate 之间。但是为什么值是错误的?当前 DateTime 比 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。

【讨论】:

在您上面提供的链接中,这用于获取本地时区。 SELECT datetime(1092941466, 'unixepoch', 'localtime'); 所以,我通过这种方式转换为当前本地日期时间。 SELECT datetime(strftime('%s','now'), 'unixepoch', 'localtime')。感谢您的帮助。 你可以用datetime('now','localtime')简化这个

以上是关于当前日期时间使用 Strftime 错误的主要内容,如果未能解决你的问题,请参考以下文章

Python中的日期时间当前年份和月份

如何以当前日期时间批量创建文件

pythonpython获取当前日期前后N天或N月的日期

c语言strftime demo

Python获取并输出当前日期时间

如何在不同的语言环境中对日期对象进行 strftime? [复制]