在SQLite或Python中查找格式为YYYY-MM-DDTH-MM-SS.sssZ的日期时间戳之间的时间差(以小时和



我有一系列的日期时间戳,我需要找到以小时为单位的差异。问题是,在适用的情况下,要将当天的差异考虑在内。当数据被添加到数据帧时,我可以尝试在Python中进行,或者在分析数据时,我也可以在SQL中进行。无论哪种方式都有效。

我用来测试的SQL代码:

SELECT commentId, commentStamp, replyStamp, 
strftime('%H:%M:%SZ',(julianday(replyStamp) - julianday(commentStamp))) 
FROM time_table

输出:

('AAAAA00000',
'2020-11-10T13:26:10.162Z',
'2020-11-10T13:35:37.292Z',
'12:09:27Z'),
('AAAAA11111',
'2020-11-09T18:48:03.073Z',
'2020-11-10T13:08:22.813Z',
'06:20:19Z'),

预期结果是这样的,只需要几个小时和几分钟:

('AAAAA00000',
'2020-11-10T13:26:10.162Z',
'2020-11-10T13:35:37.292Z',
'00:09'),
('AAAAA11111',
'2020-11-09T18:48:03.073Z',
'2020-11-10T13:08:22.813Z',
'18:40'),

我真的找不到任何有效的东西。我所尝试的一切都没有正确计算出差异。

来自日期和时间函数:

julianday((函数返回儒略日-天数自公元前4714年11月24日中午在格林尼治开始日历(。

因此,查询中的差异是以天为单位的差异,必须乘以24 * 60 * 60才能获得以秒为单位的差值,并将其与strftime()一起使用以将其格式化为时间(使用'unixepoch'修饰符(:

SELECT commentId, commentStamp, replyStamp, 
strftime('%H:%M', (julianday(replyStamp) - julianday(commentStamp)) * 24 *60 * 60, 'unixepoch') diff
FROM time_table

或者使用返回自1970-01-01:以来的秒数的strftime('%s', ...)

SELECT commentId, commentStamp, replyStamp, 
strftime('%H:%M', strftime('%s', replyStamp) - strftime('%s', commentStamp), 'unixepoch') diff
FROM time_table

请参阅演示
结果:

> commentId  | commentStamp             | replyStamp               | diff 
> :--------- | :----------------------- | :----------------------- | :----
> AAAAA00000 | 2020-11-10T13:26:10.162Z | 2020-11-10T13:35:37.292Z | 00:09
> AAAAA11111 | 2020-11-09T18:48:03.073Z | 2020-11-10T13:08:22.813Z | 18:20

最新更新