为什么这个sql语句会产生错误的时间戳?

t9aqgxwy  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(333)

声明

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验证结果时,我注意到结果大约是1秒。
我的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语句看起来会偏离一秒钟呢?

lawou6xi

lawou6xi1#

你的问题是内部选择使用 datetime . 如手册所述, 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

在dbfiddle上演示

相关问题