sqlite时间戳格式化

时间:2010-08-09 11:43:09

标签: sql database sqlite date-formatting

我正在尝试使用sqlite数据库中的日期。我将我的日期存储为时间戳,但是当我使用strftime()将它们格式化为人类可读日期时,我会得到不可预见的结果。

考虑以下情况,我选择当前时间戳:

SELECT strftime("%s","now");
1281353727

然后我尝试使用我知道代表的时间戳格式化日期,现在期望恢复今天日期的人类可读格式:

SELECT strftime('%d - %m  - %Y ', 1281353727);
01 - 04  - 3503

相反,我得到了上述结果。这是正确的行为吗?我做错了什么?

提前致谢,

凯文

3 个答案:

答案 0 :(得分:54)

您需要先将时间戳转换为日期时间:

SELECT strftime('%d - %m  - %Y ', datetime(1281353727, 'unixepoch')) FROM Visits;

答案 1 :(得分:5)

这对我有用:

datetime(visit_date/1000000,'unixepoch')

答案 2 :(得分:0)

将时间戳转换为日期时间,然后对其进行格式化:

SELECT strftime('%d - %m  - %Y ', datetime(1281353727, 'unixepoch', 'localtime')) FROM Visits;

抓住 1

确保添加 localtime 参数。否则,您将获得居住在“格林威治”的人们所感知的日期(因为时间戳从 1/1/1970 00:00 UTC (=GMT) 开始计算)。

请参阅下文,在具有 EEST 时区的工作站上,日期输出如何根据我们是否使用“localtime”而发生变化。

select strftime('%d - %m  - %Y ', datetime(1623707777, 'unixepoch', 'localtime'))
<块引用>

输出:15 - 06 - 2021

select strftime('%d - %m  - %Y ', datetime(1623707777, 'unixepoch'))
<块引用>

输出:14 - 06 - 2021

这是因为在 00:01 EEST,GMT 仍然是昨天。

抓住 2

许多程序(例如 ViberPC)也将毫秒(甚至纳秒)添加到时间戳,在这种情况下,您需要先除以 1000(或分别除以 1000000):

select strftime('%d - %m  - %Y ', datetime(1623707777421/1000, 'unixepoch', 'localtime'))