SQLITE datetime函数显示localtime不起作用

时间:2017-04-25 11:43:37

标签: sqlite datetime utc dst localtime

我的Sqlite数据库有一个时间戳作为主键,此时间戳记录为UTC。根据我的Timezone和DST,我已经检查过记录是否正确。

我试图在我的应用程序中显示这些时间戳,但是在Localtime格式中,为此我使用了以下函数:SELECT ... datetetime(timestamp,'localtime')。

但我获得的是当地时间加上1小时,我不知道为什么。 我的计算机中的本地时间是正确的,我使用Ubuntu 12.04作为操作系统。

提前感谢您的建议。

2 个答案:

答案 0 :(得分:0)

这对你有帮助吗?

警告和错误

当地时间的计算在很大程度上取决于政客的心血来潮,因此很难在所有地区得到正确的答案。在此实现中,标准C库函数localtime_r()用于帮助计算本地时间。 localtime_r()C函数通常仅在1970年到2037年之间有效。对于超出此范围的日期,SQLite会尝试将年份映射到此范围内的等效年份,进行计算,然后将年份映射回来。

这些功能仅适用于0000-01-01 00:00:00至9999-12-31 23:59:59(julidan day numbers 1721059.5至5373484.5)之间的日期。对于该范围之外的日期,这些函数的结果是未定义的。

非Vista Windows平台仅支持一组DST规则。 Vista只支持两个。因此,在这些平台上,历史DST计算将不正确。例如,在美国,2007年DST规则发生了变化。非Vista Windows平台也将新的2007 DST规则应用于前几年。在规则也发生变化的情况下,Vista确实能够更好地获得结果。

所有内部计算均采用公历系统。还假设每天的持续时间恰好是86400秒。

https://sqlite.org/lang_datefunc.html

答案 1 :(得分:0)

好的,我有。 是的,日期是“现在”天(2000年之后)。

我认为问题在于我将数据库中的时间戳作为字符串类型,所以当我做:SELECT datetime(Time,'localtime')...无法正常工作,因为它没有tzinfo(是一个不知道的日期时间)。 所以我在SELECT之后得到正确的时间处理数据(在我的情况下使用python): 1.-使用简单的SELECT查询获取数据 2.-意识到python中的日期时间到UTC时区(使用pytz libray) 3.-然后转换为本地时区(使用localize和astimezone模块)