33

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

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

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

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

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

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

提前致谢,

凯文

4

3 回答 3

66

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

SELECT strftime('%d - %m  - %Y ', datetime(1281353727, 'unixepoch')) FROM Visits;
于 2010-08-09T11:46:16.440 回答
11

这对我有用:

datetime(visit_date/1000000,'unixepoch')
于 2016-09-11T23:04:25.230 回答
0

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

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

抓到 1

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

请参阅下面的日期输出如何根据我们是否在具有 EEST 时区的工作站上使用“本地时间”而变化。

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,格林威治标准时间仍然在昨天。

抓到 2

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

select strftime('%d - %m  - %Y ', datetime(1623707777421/1000, 'unixepoch', 'localtime'))
于 2021-06-14T22:05:27.263 回答