sqlite时间戳格式化

c3frrgcw  于 2023-05-07  发布在  SQLite
关注(0)|答案(3)|浏览(168)

我正在尝试使用sqlite数据库中的日期。我将日期存储为时间戳,但是当我使用strftime()将它们格式化为人类可读的日期时,我得到了意外的结果。
考虑以下情况,我选择当前时间戳:

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

然后,我尝试使用我所知道的时间戳来格式化日期,希望得到一个人类可读的今天日期格式:

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

我得到了上面的结果。这是正确的行为吗?我做错什么了吗
先谢谢你,
凯文

nwwlzxa7

nwwlzxa71#

首先需要将timestamp转换为datetime:

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

1wnzp6jl2#

这对我很有效:

datetime(visit_date/1000000,'unixepoch')
hts6caw3

hts6caw33#

将timestamp转换为datetime,然后格式化它:

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

catch 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东部时间,格林尼治标准时间仍然是昨天。

catch 2

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

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

相关问题