为什么此 SQL 语句会产生错误的时间戳?

Why does this SQL statement produce a wrong timestamp?

声明

select strftime('%Y-%m-%d %H:%M:%f', (select datetime('2019-07-24 11:11:59', '-288.0110592 seconds')), '+411.030309 seconds')

给我时间戳

2019-07-24 11:14:01.030

用Python验证结果,我发现结果差了大约一秒。

我的Python代码:

import datetime
start = datetime.datetime.strptime('2019-07-24 11:11:59', '%Y-%m-%d %H:%M:%S')
offset1 = datetime.timedelta(seconds=288.0110592)
offset2 = datetime.timedelta(seconds=411.030309)
result = start - offset1 + offset2
print(result.strftime('%Y-%m-%d %H:%M:%S.%f'))

输出:

2019-07-24 11:14:02.019250

没想到结果因为四舍五入完全相等,但是为什么SQL语句好像差了将近一秒?

您的问题在于使用 datetime 的内部 select。如manual中所述,datetime(...)等同于strftime('%Y-%m-%d %H:%M:%S', ...),您会注意到秒的格式是%S,而不是%f,所以

的结果
datetime('2019-07-24 11:11:59', '-288.0110592 seconds')

2019-07-24 11:07:10.000

不是

的正确值(带有小数秒)
2019-07-24 11:07:10.989

datetime(...) 调用更改为 strftime('%Y-%m-%d %H:%M:%f', ...)

strftime('%Y-%m-%d %H:%M:%f', '2019-07-24 11:11:59', '-288.0110592 seconds')

产生正确的结果。

请注意,您可以简化表达式并在对 strftime:

的外部调用中使用两个修饰符
select strftime('%Y-%m-%d %H:%M:%f', '2019-07-24 11:11:59', '-288.0110592 seconds', '+411.030309 seconds')

输出:

2019-07-24 11:14:02.019

Demo on dbfiddle